0

我正在使用 Code::Blocks 和 SDL 库来创建一个简单的电脑游戏。我一直在关注一些教程,并创建了一个功能性的井字游戏。虽然该项目没有任何具体说明,但我创建了一个可以与其他游戏一起使用的模板。使用该模板,我创建了一个新项目,其中有一张 Yoshi 正在运行的图像。但是,在这个新项目中,当我使用需要打开文件的功能时,它永远不会起作用。例如:

if ( (Surf_Anim = CSurface::OnLoad("yoshi.bmp")) == NULL)
    return false;

即使 yoshi.bmp 存在,也总是返回 false,并且 OnLoad 函数与井字游戏项目中的完全相同。

我已将 yoshi.bmp 映像的副本放在可执行文件旁边,但它仍然无法正常工作。(在功能性井字游戏项目中,图像与项目位于同一目录中)

我究竟做错了什么?

编辑:确认文本文件的操作正常后,我编辑了 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 位颜色的位图......

4

1 回答 1

0

DisplayFormat 函数无法工作,因为之前没有使用函数 SDL_SetVideoMode 设置视频帧缓冲区的像素格式和颜色。

在尝试加载图像之前调用此函数,解决了问题。

于 2013-02-11T21:41:06.127 回答