2010-11-12 49 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()); 
    } 
}