0

大家好,我已经在这个问题上待了几天,但找不到答案。成功构建 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 无响应

这是示例程序

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

1 回答 1

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_Texture您可以在此处查看有关从 1.3 移植到 2.0 的更多信息。对于 SDL1.3,我使用了 LazyFoo 的教程。SDL_RendererSDL_Window.

于 2013-09-22T18:36:57.713 回答