【发布时间】:2018-02-16 11:55:01
【问题描述】:
我尝试在 C++ 中学习 SDL。我有一个简单的程序,它会显示一个图像。但是当我尝试通过单击窗口上的关闭按钮来关闭窗口时,什么也没有发生。
这是我的代码:-
#include <SDL2/SDL.h>
int main(int argc,char **argv)
{
static int k =0;
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *w;
w = SDL_CreateWindow("SDL VS Works",300,300,400,500,SDL_WINDOW_OPENGL);
SDL_Renderer *render = SDL_CreateRenderer(w,-1,SDL_RENDERER_ACCELERATED);
SDL_Surface *tux = SDL_LoadBMP("res/tux.bmp");
SDL_Texture *texture = SDL_CreateTextureFromSurface(render,tux);
SDL_FreeSurface(tux);
SDL_ShowWindow(w);
SDL_Event event;
while(1)
{
k++;
printf("Running and loop %d\'th\n",k);
SDL_PollEvent(&event);
if(event.type == SDL_QUIT)
{
printf("closing \n");
goto sos;
}
SDL_RenderCopy(render,texture,0,0);
SDL_RenderPresent(render);
SDL_Delay(1000);
}
sos:
SDL_DestroyWindow(w);
SDL_DestroyRenderer(render);
SDL_DestroyTexture(texture);
SDL_Quit();
}
我在 Arch Linux 上使用 g++ 7.3。
【问题讨论】:
-
与您的问题无关,但不要在循环中使用
goto到break。 -
另请注意,您需要检查
SDL_PollEvent返回的内容。通常通过将其作为循环中的条件。 -
@Someprogrammerdude 当代码变大时,我将使用 goto to sos: 当我想退出时。
-
@Someprogrammerdude 谢谢 :)
-
它对我来说很好用。单击关闭按钮结束循环。也许它没有收到退出消息,因为您让线程休眠 1000 毫秒并且它没有响应或其他什么,或者您在释放按钮之前移动了鼠标。尝试删除 SDL_Delay() 行并尝试查看。
标签: c++ events event-handling sdl-2