大家好,我已经关注这个问题几天了,但找不到答案。 成功构建 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.
这是示例程序
#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_Renderer
和 SDL_Window.
你可以看看here有关从 1.3 移植到 2.0 的更多信息。对于 SDL1.3,我使用了 LazyFoo's教程。
关于c - GCC/SDL2 无限期挂起并停止响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18945700/