gpt4 book ai didi

c++ - 无法从窗口获取 SDL2 事件

转载 作者:行者123 更新时间:2023-11-28 01:37:06 39 4
gpt4 key购买 nike

我正在尝试使用 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。

最佳答案

SDL 在内部使用事件队列。当任何事件发生时,比如鼠标移动了几个像素,它就会被添加到队列中。当您轮询事件时(使用 SDL_PollEvent),您只会获得最早的事件。其他一切都留在队列中。

由于您的代码每秒只轮询一次,队列可能会被鼠标移动淹没,而 SDL_QUIT 事件只是在队列深处排队等待。

您通常想要做的是在循环中轮询事件。请注意,当没有未决事件时,SDL_PollEvent 返回 0。

while (SDL_PollEvent(&event)) {
if(event.type == SDL_QUIT)
{
//...
}
}

关于c++ - 无法从窗口获取 SDL2 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48826240/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com