c++ - SDL_PollEvent 有什么作用?

标签 c++ sdl sdl-2

我正在阅读一本有关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/

相关文章:

rust - SDL2如何安装和使用 "gfx"功能

c++ - 使用 SFML TCP 套接字和数据包损坏文件

c++ - 如何在 MAC 的/Library/Framework 文件夹中包含 C++ 中的文件

c++ - 为什么我在使用 SDL2 时仍然收到 'undefined reference' 链接器错误?

audio - SDL音频流回调函数从未触发

c++ - SDL_Init 中的大内存泄漏

c++ - 事件驱动的 SDL2

c++ - 写入QTcpSocket并不总是在相反的QTcpSocket上发出readyRead信号

C++类编译

C++:getline 不是参数列表的一部分