在C ++中,使用Code :: Blocks,虽然它存在且路径应该是正确的,但是无法打开文件

时间:2013-02-11 12:48:06

标签: c++ file sdl codeblocks

我使用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位颜色的位图......

1 个答案:

答案 0 :(得分:0)

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

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