【问题标题】:GCC/SDL2 Hangs Indefinitely and Stops RespondingGCC/SDL2 无限期挂起并停止响应
【发布时间】:2013-09-22 15:50:38
【问题描述】:

大家好,我已经解决这个问题几天了,但找不到答案。 成功构建 SDL2 后,我的项目挂起并且没有响应。它们不接受输入并无限期挂起,除非我使用命令提示符窗口关闭它们。甚至应用程序窗口上的“X”也没有响应。据我所知,这个问题似乎与窗口本身有关,因为程序可以绘制到渲染器。请帮忙。

我使用的是 Windows 7、MinGW32、Eclipse Europa 和 SDL2

请参阅下面的问题示例......

内部构建器用于构建

gcc -O0 -g3 -Wall -c -fmessage-length=0 -osrc\CTestProject.o ..\src\CTestProject.c

gcc -oCTestProject.exe src\CTestProject.o -lmingw32 -lSDL2main -lSDL2

构建完成项目 CTestProject

耗时:562 毫秒。

这是示例程序

#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>

int main(int argc, char* args[]) {
    
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Event event;
    SDL_Window* sdlWindow = SDL_CreateWindow("test",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,300,300,SDL_WINDOW_OPENGL);
    SDL_Renderer* sdlRenderer = SDL_CreateRenderer(sdlWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    
    while(event.type != SDL_QUIT){
        SDL_RenderClear(sdlRenderer);
        SDL_SetRenderDrawColor(sdlRenderer, 150, 0, 0, 255);
        SDL_RenderPresent(sdlRenderer);         
    }
    
    SDL_DestroyRenderer(sdlRenderer);
    SDL_DestroyWindow(sdlWindow);
    SDL_Quit(); 
    
    return EXIT_SUCCESS;
}

【问题讨论】:

    标签: c windows gcc sdl mingw32


    【解决方案1】:
       while(event.type != SDL_QUIT)
       {
            SDL_RenderClear(sdlRenderer);
            SDL_SetRenderDrawColor(sdlRenderer, 150, 0, 0, 255);
            SDL_RenderPresent(sdlRenderer);         
        }
    

    您正在比较一个在您的while 循环中不变的变量。您需要在每次循环迭代中使用SDL_PollEvent(&amp;event) 更新它:

    bool quit = false;
    SDL_Event event;
    
    // Loop while user hasn't quit
    while ( !quit )
    {
        //  Check all new event to see if a SDL_QUIT event has come in...
        while (SDL_PollEvent(&event) )
        {
            // SDL_QUIT event has come in, quit. 
            if ( event.type == SDL_QUIT )
            {
                quit = true;
            }
        }
    
        SDL_RenderClear(sdlRenderer);
        SDL_SetRenderDrawColor(sdlRenderer, 150, 0, 0, 255);
        SDL_RenderPresent(sdlRenderer);     
    }
    

    另外,我认为您不再需要 SDL2_main。至少我没有在我的代码中使用它。 在您的具体示例中,您也不需要#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;


    教程

    SDL2 相当新,所以没有那么多教程。我只知道TwinklebearDev。但在大多数情况下,SDL1.3 和 SDL2 非常相似。因此,在大多数情况下,您可以将 SDL1.3 代码与SDL_TextureSDL_RendererSDL_Window.一起使用。您可以查看here,了解有关从 1.3 移植到 2.0 的更多信息。对于 SDL1.3,我使用了 LazyFoo's 教程。

    【讨论】:

    • 非常感谢 olevegrad,这已经解决了问题!您有关于 SDL2 的最新链接或书籍吗?我将不胜感激,因为我自己遇到的在线文档似乎很少。
    • @JB87 很高兴能提供任何帮助 =) 我已经用一些教程信息更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 2011-01-22
    • 2017-06-29
    • 2011-05-07
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多