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

时间:2013-09-22 15:50:39

标签: c windows gcc sdl mingw32

大家好我已经在这个问题上待了几天而且找不到答案。 成功构建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毫秒。

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

1 个答案:

答案 0 :(得分:2)

   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_TextureSDL_RendererSDL_Window.一起使用。有关从1.3移植到2.0的更多信息,您可以查看here。对于SDL1.3,我使用了LazyFoo's教程。