大家好我已经在这个问题上待了几天而且找不到答案。 成功构建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;
}
答案 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_Texture
,SDL_Renderer
和SDL_Window.
一起使用。有关从1.3移植到2.0的更多信息,您可以查看here。对于SDL1.3,我使用了LazyFoo's教程。