c++ - SDL 窗口在启动时关闭并返回 0

标签 c++ return sdl exit

程序启动后窗口立即关闭。这是主要功能:

int main(int argc, char* argv[])
{
    if (!init())
    {
        printf("Could not initialize!");
    }
    else
    {
        bool quit = false;
        SDL_Event ev;

        while(!quit)
        {
            while(SDL_PollEvent(&ev))
            {
                if(ev.type = SDL_QUIT)
                {
                    quit = true;
                }
            }
        }
    }
    close();
    return 0;
}

添加 printf() 语句将其缩小到此部分

while(SDL_PollEvent(&ev))
{
    if(ev.type = SDL_QUIT)
    {
        quit = true;
    }
}

如果我将 while(SDL_PollEvent(&ev)) 更改为 while(!SDL_PollEvent(&ev))while(SDL_PollEvent(&ev) != 0) 窗口保持打开状态,但只要我将鼠标悬停在它上面或尝试移动它,它就会关闭。

the SDL documentation 表示 SDL_PollEvent 仅在存在未决事件时返回 1(真),并且由于程序返回 0,因此似乎 SDL_PollEvent 必须以某种方式返回 1,而且 ev.type 被设置为 SDL_QUIT 而没有点击 X 按钮,我觉得这不太可能。所以我可能做错了什么,但我无法弄清楚它是什么,我一直在努力寻找解决方案。

此外,这里是 init() 函数。

bool init()
{
    bool success = true;
    if( SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        printf("SDL failed to initialize! SDL Error: %s\n", SDL_GetError());
        success = false;
    }
    else
    {
        window = SDL_CreateWindow("Image Encrypter", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
                                  SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
        if(window == NULL)
        {
            printf("Window could not be created! SDL Error: %s\n", SDL_GetError());
            success = false;
        }
        else
        {
            screenSurface = SDL_GetWindowSurface(window);
            if(screenSurface == NULL)
            {
                printf("Screen surface could not be created! SDL Error: %s\n", SDL_GetError());
            }
        }
    }
    return success;
}

控制台没有输出任何 init() 函数中的 printf 语句,所以我认为这不是问题所在。

最佳答案

这里的一个常见错误:

if(ev.type = SDL_QUIT)

- 这是一个赋值,而不是一个比较。您的代码的第一个版本应该可以工作。

关于c++ - SDL 窗口在启动时关闭并返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30153961/

相关文章:

c++ - 声明从具有虚函数的基类派生的对象时出现错误 c2143 和 c4430

c# - 如何找到抛出 EETypeLoadException 的原因?

c++ - 在现代 CMake 中设置全局选项?

arrays - 如何从 Golang 中的不同函数将一个数组的元素复制到另一个数组

c++ - SDL_MOUSEBUTTONUP 什么时候触发?

c++ - 如何在 cmake 中使用 SDL2 和 SDL_image

c++ - 仅更改 const-ness 的指针转换可以调用未定义的行为吗?

c# - 来自 C++ COM 的 C# 字符串

java - 方法不返回字符串

C++ 返回字符串导致 free() : invalid pointer error