c - GCC/SDL2 无限期挂起并停止响应

标签 c windows gcc sdl mingw32

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

我正在使用 Windows 7、MinGW32、Eclipse Europa 和 SDL2

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

Internal Builder is used for build

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

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

Build complete for project CTestProject

Time consumed: 562 ms.

SDL2 Not Responding

这是示例程序

#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;
}

最佳答案

   while(event.type != SDL_QUIT)
   {
        SDL_RenderClear(sdlRenderer);
        SDL_SetRenderDrawColor(sdlRenderer, 150, 0, 0, 255);
        SDL_RenderPresent(sdlRenderer);         
    }

您正在比较一个在您的 while 中没有改变的变量环形。您需要使用 SDL_PollEvent(&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 <stdio.h>#include <stdlib.h>在你的具体例子中。


教程

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

关于c - GCC/SDL2 无限期挂起并停止响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18945700/

相关文章:

c - OpenGL 中奇怪的方形照明伪影

c++ - 如何在 GUI 窗口中使用 WinApi (GDI) 在 C++ 中设置鼠标单击像素?

c - 具有多种消息类型的嵌入式 RTOS 生产者和消费者

c - 函数返回错误值为 mark 返回值为 "char*"

windows - 如何在 Windows 中将 Alt 用作 Emacs 23 的元键,尤其是 M-x?

c - 为什么我的程序在嵌套时会生成随机结果?

macos - OS X 10.8、llvm、带有 CMake 的 OpenMP

c - c 中的 sqrt() 方法(Netbeans 编译器与 gcc)

c - Websockets、碎片和通过 recv 提供的可用数据

C++循环在按下键时模拟按键