SFML:在pollEvent循环

时间:2017-06-09 12:15:42

标签: c++ events sfml

这是我最近的SFML 2.4.2中的代码

#include <SFML/Graphics.hpp>
#include <iostream>

int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "My First SFML Game", sf::Style::Titlebar | sf::Style::Close);

std::cout << "Press a key to continue" << std::endl;
int i = 0;
sf::Event event;

while(window.isOpen()) {

    while(window.pollEvent(event)) {
        std::cout << "Polling event" << std::endl;
        if(event.type == sf::Event::Closed) {

            window.close();
        }
    }

    if(window.waitEvent(event)) {
        if(event.type == sf::Event::Closed)std::cout << "Event Activated" << i++ << std::endl;
    }
}
}

Output 当我单击关闭按钮并且当我移入或移出窗口时打印了所有轮询事件时,您看到的所有事件激活输出都被打印出来。即使我在窗口中点击它也没有打印轮询事件!我的问题是,pollEvents,为什么你没有先被调用并在你第一次(显然)得到关闭事件时关闭窗口,因为你已经先写了?为什么首先调用wait事件方法并弹出que是没有意义的。请帮忙。

1 个答案:

答案 0 :(得分:1)

如果没有事件,pollEvent将不会返回true,然后它将不会进入您的循环。但是waitEvent会停止程序直到收到事件。

阅读the documentation of SFML Events

  

sf::Window::waitEvent - 此功能正在阻止:如果没有待处理事件,则会等到收到事件。
  sf::Window::pollEvent - 此功能未阻止:如果没有待处理事件,则返回false并保留事件未修改。