0

由于某种原因,SDL 拒绝渲染图像。我不明白为什么,这真的阻碍了我正在开发的 2d 游戏的进展。一切都正确链接等等。这是我的代码:

//main.cpp
#include "main.h"

void game::createWindow(const int SCREEN_W, const int SCREEN_H, const char* SCREEN_NAME)
{
 buffer = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 0, NULL);
 SDL_WM_SetCaption(SCREEN_NAME, NULL);
}

void game::enterLoop()
{
 while(Running == true)
 {
  SDL_BlitSurface(zombie, NULL, buffer, NULL);
  SDL_Flip(buffer);

  while(SDL_PollEvent(&gameEvent))
  {
   if(gameEvent.type == SDL_QUIT)
   {
    Running = false;
   }
  }
 }
}

void game::loadContent()
{
 zombie = SDL_LoadBMP("zombie.bmp");
}

int main(int argc, char* argv[])
{
 game gameObj;

 SDL_Init(SDL_INIT_EVERYTHING);
 gameObj.createWindow(960, 600, "uShootZombies");
 gameObj.loadContent();
 gameObj.enterLoop();

 SDL_Quit();

 return 0;
}

//main.h
#include <SDL.h>
#include <fstream>
#include <string>

using namespace std;

class game
{
 public:
 void createWindow(const int SCREEN_W, const int SCREEN_H, const char* SCREEN_NAME);
 void enterLoop();
 void loadContent();

 game()
 {
  Running = true;
 }

 ~game()
 {
  SDL_FreeSurface(buffer);

  SDL_FreeSurface(background);
  SDL_FreeSurface(player);
  SDL_FreeSurface(zombie);
 }

 private:
 SDL_Surface* buffer;

 SDL_Surface* background;
 SDL_Surface* player;
 SDL_Surface* zombie;

 SDL_Event gameEvent;
 bool Running;
};NU
4

2 回答 2

1

我刚刚复制了你所有的代码以在 code::blocks 中使用,它工作正常。当然,我使用的是我自己的 .bmp 文件,我将其命名为“zombie.bmp”

你确定你的 .bmp 文件没问题吗?

请注意,如果您最初将其保存为 .jpeg 文件或类似文件,然后简单地将其重命名为 .bmp,它将不起作用(而且它也不会抛出错误)

它必须最初保存为 bmp。

这就是我能想到的。

于 2010-11-12T09:28:00.443 回答
0

似乎 Sour Lemon 已经解决了您的问题,但我仍然认为值得指出的是,上面的代码没有执行任何检查以确保您的僵尸图像实际上已正确加载。

你应该做这样的事情:

void game::loadContent()
{
    zombie = SDL_LoadBMP("zombie.bmp");
    if (zombie == NULL) {
        ReportError(SDL_GetError());
    }
}
于 2010-11-23T23:48:52.940 回答