class Game {
public:
Game(int width, int height) {
gwidth = width;
gheight = height;
}
~Game() {
}
bool initGame() {
bool sucsess = true;
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
sucsess = false;
}
//gTetrisSurface = SDL_LoadBMP("TetrisBg.bmp");
gWindow = SDL_CreateWindow("Petris V1", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, gwidth, gheight, SDL_WINDOW_SHOWN);
gScreenSurface = SDL_GetWindowSurface(gWindow);
gMainBG = SDL_LoadBMP("test.bmp");
/**if (gMainBG == NULL) {
return false;
}**/
bool running = true;
//SDL_SetWindowFullscreen(gWindow, SDL_WINDOW_FULLSCREEN_DESKTOP);
while (running == true) {
SDL_BlitSurface(gMainBG, NULL, gScreenSurface, NULL);
SDL_UpdateWindowSurface( gWindow );
}
return sucsess;
}
protected:
int gwidth, gheight;
SDL_Window* gWindow = NULL;
SDL_Surface* gScreenSurface = NULL;
SDL_Surface* gTetrisSurface = NULL;
SDL_Surface* gPongSurface = NULL;
SDL_Surface* gMainBG = NULL;
};
这背后的想法是,这应该是一个巨大的表面,包含2个其他游戏的其他表面。问题是,它似乎不会绘制我试图在其上绘制的BMP。因此,我的发展有点困难。有人看到这个问题可能会闷闷不乐吗?谢谢!
编辑:我这样做是为了刷新事件,但是,我做了一些调试,问题似乎是img文件返回NULL,为什么?它应该加载一个bmp ...(根本没有错误消息..)答案 0 :(得分:2)
从SDL2的文档中: https://wiki.libsdl.org/SDL_GetWindowSurface
如果调整窗口大小,此曲面将无效。调整窗口大小后,必须再次调用此函数以返回有效曲面。 您可能无法在此窗口中将其与3D或渲染API结合使用。
我的建议是避免直接使用窗口表面。 相反,您应该使用渲染器并将自己的主曲面复制到背景纹理。
SDL2迁移指南清楚地解释了在屏幕上复制曲面和纹理的正确方法,尤其是段落“If your game wants to do both”。
答案 1 :(得分:0)
整个问题是BMP文件位于错误的文件夹中。
如果有人遇到同样的问题,图片应该与src(调试时)或解决方案(如果构建)位于同一目录中。
希望这对未来的某个人有所帮助,无论是哪种方式,都要感谢那些试图想出其他可能性的人。
(使用visual studio)