2010-11-12 2 views
0

По какой-то причине SDL отказывается отображать изображение. Я не понимаю, почему, и это действительно забивает мой прогресс в 2-й игре, которую я разрабатываю. Все связано правильно и так. Вот мой код:C++ и SDL: проблема с показом изображения?

//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 
+0

Вы проверили, если ваши поверхности действительны после загрузки? –

+0

Я точно не проверяю ошибки, как вы можете видеть. Однако я попытался использовать очень простой код «int main-only», который просто загрузил действительное изображение и поместил его на экран. Там тоже не повезло. Если вы хотите увидеть, какой код я использовал, перейдите к ленивым учебникам sdl foo и посмотрите на первый учебник (это не «настройка SDL»). – Lemmons

ответ

1

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

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

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

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

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

+0

Также, если вы используете учебники lazy foo, вы узнаете о настройке up SDL_image (http://www.libsdl.org/projects/SDL_image/), который даст вам больше свободы в отношении того, какое расширение файла вы используете в любом случае. –

+0

Вы были правы. Это сработало. Я не знаю, почему это был не Bmp, хотя я помню, как сохранить его как один. Иногда эти мелочи - это ответ, да? – Lemmons

0

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

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

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