首页 > 解决方案 > 当鼠标移出窗口时,SFML 窗口会自行关闭

问题描述

我的 SFML 应用程序按预期构建和运行,但是当让鼠标退出/进入左侧窗口边框上的窗口时,它会意外关闭。

我怎样才能让这个错误停止发生?我不希望窗口关闭,除非我在代码中调用它。

视觉工作室 2019

SFML-2.5.1(我想我下载了版本:Visual C++ 15 (2017) - 32-bit)

这是我正在运行的代码的最小示例,它会产生所述错误:

#include "SFML-2.5.1/include/SFML/Graphics.hpp"
#include <iostream>
#include <vector>
#include <string>

using std::cout;
using std::endl;
using std::vector;
using std::endl;
using std::string;

sf::Vector2f window_size(800, 600);
sf::VideoMode video_mode(window_size.x, window_size.y);
sf::RenderWindow window(video_mode, "Hello");

int main() {
    while (window.isOpen()) {
        //Deal with input and update program
        sf::Event event;

        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed
            || event.key.code == sf::Keyboard::Escape) {
                window.close();
            }
        }

        //Draw things on screen
        window.clear(sf::Color::White);
        //Draw things here, not nothing right now    
        window.display();
    }
}

标签: c++visual-studiosfml

解决方案


sf::Event被组织为一个带标签的联合,其中type成员是标签,活动成员依赖于标签。

该成员仅在键盘事件类型之一(或)key时才处于活动状态。typesf::Event::KeyPressedsf::Event::KeyReleased

检查不活动的工会成员是未定义的行为。在实践中,发生的事情可能类似于以下内容。发生其他一些事件,其中一个成员在数字上等于sf::Keyboard::Escape并且与 物理共享空间key.code。该程序正在访问该成员并将其错误地解释为key.code.


相关文件:


推荐阅读