我使用Code :: Blocks和SDL库来创建一个简单的电脑游戏。 我一直在关注一些教程,并创建了一个tic tac toe的功能性游戏。 虽然该项目没有任何具体说明,但我创建了一个可以与其他游戏一起使用的模板。 使用该模板,我创建了一个新项目,在那里我有一个Yoshi运行的图像。 但是,在这个新项目中,当我使用需要打开文件的函数时,它永远不会起作用。例如:
if ( (Surf_Anim = CSurface::OnLoad("yoshi.bmp")) == NULL)
return false;
总是返回false,即使yoshi.bmp存在,并且OnLoad函数与Tic Tac Toe项目中的完全相同。
我已将yoshi.bmp图像的副本放在可执行文件旁边,但它仍然无效。 (在功能性TicTacToe项目中,图像与项目位于同一目录中)
我做错了什么?
编辑:在确认文本文件的操作正常工作后,我编辑了CSurface :: OnLoad函数,如下所示:
SDL_Surface* CSurface::OnLoad(char* File)
{
SDL_Surface* Surf_Temp = NULL;
SDL_Surface* Surf_Return = NULL;
if((Surf_Temp = SDL_LoadBMP(File)) == NULL)
{
return NULL;
}
printf ("Loafing worked\n");
Surf_Return = SDL_DisplayFormat (Surf_Temp);
SDL_FreeSurface(Surf_Temp);
if (Surf_Return == NULL)
printf ("SDL_DisplayFormat didn't\n");
return Surf_Return;
}
两个printf函数都已执行。我想这个问题与我使用SDL函数的方式有关。无论如何,在完美的工作项目中,一切都以同样的方式完成。图像yoshi.bmp,与上述工作项目中的图像一样,是一个24位颜色的位图......
答案 0 :(得分:0)
DisplayFormat功能无法工作,因为先前未使用SDL_SetVideoMode函数设置视频帧缓冲区的像素格式和颜色。
在尝试加载图像之前调用此函数,解决了问题。