C++ SDL#U BlitSurface不';不要拉到屏幕上

C++ SDL#U BlitSurface不';不要拉到屏幕上,c++,windows,visual-studio,sdl,sdl-2,C++,Windows,Visual Studio,Sdl,Sdl 2,我试图简单地创建一个窗口并将一个图像blit到屏幕上,但由于某些原因,图像没有显示,屏幕保持白色。为了解决这个问题,我一直在参考lazyfoo的教程。我在下面发布了我所有的代码,希望它足够可读。谢谢你的帮助,因为我在这件事上已经坚持了一两个小时了 #include <SDL.h> #include <SDL_audio.h> #include <cstdio> #include <iostream> #include <Windows.h&g

我试图简单地创建一个窗口并将一个图像blit到屏幕上,但由于某些原因,图像没有显示,屏幕保持白色。为了解决这个问题,我一直在参考lazyfoo的教程。我在下面发布了我所有的代码,希望它足够可读。谢谢你的帮助,因为我在这件事上已经坚持了一两个小时了

#include <SDL.h>
#include <SDL_audio.h>
#include <cstdio>
#include <iostream>
#include <Windows.h>


// creates Load_surface function
SDL_Surface *loadSurface(std::string path) {
    SDL_Surface *loadedSurface = SDL_LoadBMP(path.c_str());
    if (loadedSurface == NULL) {
       printf("Unable to load image %s! SDL Error: %s\n", path.c_str(), 
         SDL_GetError());
    }
    return loadedSurface;

}



int main(int argc, char ** argv)
{


    // pointer variable for window
    SDL_Window *window;
    SDL_Surface *surface = NULL;
    SDL_Surface *media = 
         loadSurface("C:\\Users\\nickl\\Desktop\\buttonpressed.bmp");


    // initialize and test for failure
    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) == -1) {

        return 1;
    }





    // create the window
    window = SDL_CreateWindow(
        "Ice Cream Boys Software",
        48,
        48,
        640,
        480,
        SDL_WINDOW_OPENGL
     );

    // safety check, see if window was created, otherwise throw an error
    if (window = NULL) {
        printf("Could not create window: %s", SDL_GetError());
        return 1;
    }
    else {
        OutputDebugString(TEXT("Surface loaded.\n"));
        surface = SDL_GetWindowSurface(window);
    }

    SDL_BlitSurface(media, NULL, surface, NULL);
    SDL_UpdateWindowSurface(window);

    /* ************************************** loop  **************************** */
    // bool to keep window open and event handler
    bool quit = false;
    SDL_Event e;





    // loop to keep window open
    while (!quit) {
         while (SDL_PollEvent(&e) != 0) {
             if (e.type == SDL_QUIT) {
                 quit = true;
            }
             else if (e.type == SDL_KEYDOWN) {
                 OutputDebugString(TEXT("My output string.\n"));


             }

         }
     }

    /* ************************************************************************** */



    // close and destroy window
    SDL_DestroyWindow(window);

    // quit
    SDL_Quit();






    return 0;
}
#包括
#包括
#包括
#包括
#包括
//创建加载曲面函数
SDL_表面*加载表面(标准::字符串路径){
SDL_Surface*loadedSurface=SDL_LoadBMP(path.c_str());
如果(loadedSurface==NULL){
printf(“无法加载图像%s!SDL错误:%s\n”,path.c_str(),
SDL_GetError());
}
返回加载面;
}
int main(int argc,字符**argv)
{
//窗口的指针变量
SDL_窗口*窗口;
SDL_Surface*Surface=NULL;
SDL_表面*介质=
加载面(“C:\\Users\\nickl\\Desktop\\buttonpressed.bmp”);
//初始化并测试故障
如果(SDL_Init(SDL_Init_视频| SDL_Init_音频)=-1){
返回1;
}
//创建窗口
window=SDL\u CreateWindow(
“冰激凌男孩软件”,
48,
48,
640,
480,
SDL\u窗口\u OPENGL
);
//安全检查,查看是否创建了窗口,否则抛出错误
如果(窗口=NULL){
printf(“无法创建窗口:%s”,SDL_GetError());
返回1;
}
否则{
OutputDebugString(文本(“表面加载的。\n”));
表面=SDL_GetWindowSurface(窗口);
}
SDL_BlitSurface(介质、空、表面、空);
SDL_更新内表面(窗口);
/**************************************************************************************************************************/
//bool保持窗口打开和事件处理程序
bool-quit=false;
SDL_事件e;
//循环以保持窗口打开
而(!退出){
while(SDL_PollEvent(&e)!=0){
如果(e.type==SDL\u退出){
退出=真;
}
else if(e.type==SDL\u KEYDOWN){
OutputDebugString(文本(“我的输出字符串”。\n”);
}
}
}
/* ************************************************************************** */
//关闭并销毁窗口
SDL_窗口(窗口);
//退出
SDL_退出();
返回0;
}

如果您将
0
传递给
标志,而不是
SDL\u WINDOW\u OPENGL
,是否有效
SDL\u GetWindowSurface()
与OpenGL或SDL\u渲染器系统不兼容。另外,将
SDL\u LoadBMP()
移动到
SDL\u Init()
之后,在之前操作不会给我带来温暖的模糊感。在调用
SDL\u GetWindowSurface()
之后,您是否验证了
surface
是否为非NULL?您所说的我都做了。显然,即使在运行
SDL\u GetWindowSurface()
之后,
surface
仍然为空。谢谢代码有错误,
if(Window=NULL)
,您的意思是
Window==NULL
Oh,>。<谢谢。这解决了您的问题吗?如果您将
0
传递给
标志,而不是
SDL\u Window\u OPENGL
,是否有效
SDL\u GetWindowSurface()
与OpenGL或SDL\u渲染器系统不兼容。另外,将
SDL\u LoadBMP()
移动到
SDL\u Init()
之后,在之前操作不会给我带来温暖的模糊感。在调用
SDL\u GetWindowSurface()
之后,您是否验证了
surface
是否为非NULL?您所说的我都做了。显然,即使在运行
SDL\u GetWindowSurface()
之后,
surface
仍然为空。谢谢代码有错误,
if(Window=NULL)
,您的意思是
Window==NULL
Oh,>。<谢谢。这解决了您的问题吗?