SDL 只会在尝试打印图片时绘制黑屏 C++

SDL will only draw a black screen when trying to print a picture C++

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 个游戏的另外 2 个表面。问题是,它似乎无法绘制我尝试在其上绘制的 BMP。因此,我的发展有点停滞不前。有人看到这个问题的可能解决方案吗?谢谢!

编辑:我这样做是为了刷新事件,但是,我做了一些调试,问题似乎是 img 文件 returns NULL,为什么?它应该加载一个 bmp...(完全没有错误消息..)

来自 SDL2 的文档: https://wiki.libsdl.org/SDL_GetWindowSurface

This surface will be invalidated if the window is resized. After resizing a window this function must be called again to return a valid surface. You may not combine this with 3D or the rendering API on this window.

我的建议是避免直接使用 window 表面。 相反,您应该使用渲染器并将自己的主表面复制到背景纹理。

SDL2迁移指南清楚地解释了在屏幕上复制表面和纹理的正确方法,尤其是“If your game wants to do both”段落。

整个问题是 BMP 文件在错误的文件夹中。

如果有人遇到同样的问题,图片应该与 src(调试时)或解决方案(如果构建)在同一目录中。

希望这对将来的某个人有所帮助,无论哪种方式,感谢那些尝试提出其他可能性的人。

(使用 visual studio)