gpt4 book ai didi

c++ - SDL_PollEvent 有什么作用?

转载 作者:太空宇宙 更新时间:2023-11-04 16:01:50 26 4
gpt4 key购买 nike

我正在阅读一本有关SDL的介绍性书籍代码,并且有这样的示例代码:

void Game::handleEvents()
{
SDL_Event event;
if (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
m_bRunning = false;
break;
default:
break;
}
}
}

我知道这将查看事件队列,如果有任何内容,检索它并将其运行到 switch 语句。在我添加此代码之前,窗口已显示,但您无法拖放、关闭或调整窗口大小。现在我添加了这段代码,我可以关闭我所期望的窗口。我没想到的是我可以拖放窗口。

我认为这将是一个单独的事件,我需要在将来包含在 switch 语句中。为什么拖放也有效?它是 SDL_PollEvent(因为我评论了 switch 语句但留下了“如果”,我仍然能够拖动)但这是为什么呢?另外,为什么只有拖放自动起作用?为什么不调整大小?

最佳答案

我们不需要处理所有事件,一些 SDL 会为我们处理。与窗口属性相关的事件将自动处理。为了调整窗口大小,您必须在创建窗口时添加标志 SDL_WINDOW_RESIZABLE。虽然 SDL 会处理窗口的实际大小调整,但它可能仍需要一些事件处理,因为要绘制的表面大小不同,它不会自动调整我们尝试在其中绘制的任何图像的大小。

虽然我没有在文档中找到关于为什么 SDL_PollEvent 的行为如您上述描述的答案,或者如果这是有意为之的行为,它在不同系统上的工作方式略有不同。在 osx 上,可以在没有上述功能的情况下移动窗口,但不会显示关闭的 X。再次添加该函数,可以正常移动、最小化和关闭窗口。

根据 documentation ,SDL_PollEvent 旨在执行您描述的操作,查看是否有任何事件并检索它们。

关于c++ - SDL_PollEvent 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42535126/

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