2010-11-12 47 views
0

由於某些原因,SDL拒絕呈現圖像。我不明白爲什麼,它正在讓我在正在開發的2D遊戲中取得進步。一切都妥善鏈接,等等。這裏是我的代碼: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

你檢查,如果你的表面加載後是有效的? – 2010-11-12 04:41:34

+0

我不完全錯誤檢查,你可以看到。不過,我嘗試使用非常基本的「int main-only」代碼,它只是簡單地加載一個有效的圖像並將其放到屏幕上。那裏也沒有運氣。如果您想查看我使用的代碼,請參閱lazy foo的sdl教程並查看第一個教程(這不是「設置SDL」的教程) – Lemmons 2010-11-12 08:05:43

回答

1

我只是複製所有代碼的代碼::塊使用,它工作正常。 當然,我使用我自己的.bmp文件,我命名爲「zombie.bmp」

你確定你的.bmp文件可以嗎?

請注意,如果您最初將其保存爲.jpeg文件或類似的東西,然後只需給它改名爲.bmp,這是不行的(而且它也不會引發錯誤)

它必須最初保存爲bmp。

這就是我能想到的。

+0

另外,如果您使用lazy foo的教程,您將瞭解有關設置up SDL_image(http://www.libsdl.org/projects/SDL_image/),它可以讓你更自由地使用你使用的文件擴展名。 – 2010-11-12 09:30:32

+0

你是對的。有效。我不知道爲什麼它不是一個bmp,即使我記得把它保存爲一個。有時候這些小東西就是答案吧? – Lemmons 2010-11-12 09:30:56

0

看來,酸檸檬已經解決了你的問題,但我仍然認爲值得指出的是,上述代碼不會執行任何檢查,以確保你的殭屍圖像實際上加載正確。

你應該做這樣的事情:

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