C ++ и SDL: проблема с отображением изображения? - PullRequest
0 голосов
/ 12 ноября 2010

По какой-то причине 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

Ответы [ 2 ]

1 голос
/ 12 ноября 2010

Я просто скопировал весь ваш код для использования в code :: blocks, и он отлично работает. Конечно, я использовал свой собственный файл .bmp, который я назвал "zombie.bmp"

Вы уверены, что ваш файл .bmp в порядке?

Имейте в виду, что если вы изначально сохраните его как файл .jpeg или что-то в этом роде, а затем просто переименуете его в .bmp, он не будет работать (и не выдаст ошибку)

Первоначально он должен быть сохранен как BMP.

Это все, что я могу придумать.

0 голосов
/ 24 ноября 2010

Кажется, что Sour Lemon уже решил вашу проблему, но я все же подумал, что стоит указать, что приведенный выше код не выполняет никаких проверок, чтобы убедиться, что ваше изображение зомби действительно загружено правильно.

Вы должны делать что-то вроде этого:

void game::loadContent()
{
    zombie = SDL_LoadBMP("zombie.bmp");
    if (zombie == NULL) {
        ReportError(SDL_GetError());
    }
}
...