在VS2010中练习使用SDL文字类库时,生成成功但是显示文字失败,说是有异常有冲突

2025-04-01 08:40:06
推荐回答(1个)
回答1:

主要错误:screen没有赋值,导致后面加载字体失败。
小错误:fontFile参数应该使用,不要函数内部用自己的参数,否则换一个ttf可能会出错。
此外,错误信息可以用TTF_GetError()和SDL_GetError()得到。

给你粗糙的改了一下,在2010下编译后,在屏幕左上角可见一个白色的"TEST"。
有问题可以再问。如果对SDL开发感兴趣,欢迎加入SDL团队。

#include
#include
#include
#include
#define WIDTH 600
#define HEIGHT 400
#define CPP 32
SDL_Surface *screen = NULL;
int initSDL(void)
{
if(SDL_Init(SDL_INIT_EVERYTHING) == -1)
{ printf("SDL init failed...\n");
return 0;
}
screen = SDL_SetVideoMode(WIDTH,HEIGHT,CPP,SDL_SWSURFACE|SDL_DOUBLEBUF);
if(screen == NULL)
{ printf("init screen failed, please check your display card\n");
return 0;
}
if(TTF_Init() == -1)
{
printf("init ttf files failed...\n");
return 0;
}
SDL_WM_SetCaption("SDL show text",NULL);
return 1; }
void quitSDL(void)
{ TTF_Quit();
SDL_Quit(); }
int initFont(SDL_Surface **aMsg, const char *aText,SDL_Color &aTextColor,const char *aFontFile,int aSize)
{TTF_Font *font =TTF_OpenFont(aFontFile,aSize);
if(NULL==font)
{printf("打开字体失败:%s\n", TTF_GetError());
return 0; }
*aMsg=TTF_RenderText_Solid(font,aText,aTextColor);
TTF_CloseFont(font);
return 1;}
void showText(SDL_Surface *aMsg,int aLeft,int aTop,int aWidth,int aHeight,SDL_Surface *aDestination)
{
SDL_Rect textPosition;
textPosition.x =aLeft;
textPosition.y =aTop;
textPosition.w =(aWidth==0)?aMsg->w:aWidth;
textPosition.h =(aHeight==0)?aMsg->h:aHeight;
SDL_BlitSurface(aMsg,NULL,aDestination,&textPosition);
}
void showScreen(void)
{ SDL_Flip(screen);}
int main(int argc,char *argv[])
{
SDL_Surface *pText;
//define color is white
SDL_Color textColor ={255,255,255};
//initial SDL
initSDL();
//载入字库文件,“simhei.ttf”文件是一个字库文件,可以到系统的font文件夹下找到,找到后放到cpp文件目录下
initFont(&pText,"TEST",textColor,"simhei.ttf",12);
//show text to display memory
showText(pText,0,0,0,0,screen);
//show text to screen
showScreen();
//delay 5s
SDL_Delay(5000);
//close SDL
quitSDL();
system("pause");
return 0;
}