【问题标题】:SFML Window closes by itself when mouse goes outside of window当鼠标移出窗口时,SFML 窗口会自行关闭
【发布时间】:2020-01-19 08:09:03
【问题描述】:

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

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

Visual Studio 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();
    }
}

【问题讨论】:

  • 如果event.type 不是键盘事件(例如sf::Event::KeyPressed),则无法检查event.keySee.
  • 似乎奏效了。谢谢你。如果您将其发布为答案,我会将其标记为已回答。所以它很可能在我离开/进入窗口时触发了一个事件,它因为无法读取而崩溃?
  • @Einar eventseveral structures 的并集。这意味着正在生成和处理大量事件。要处理正确的,你需要知道它的类型,否则你会得到一个UB
  • 我明白了。谢谢。
  • 添加给我处理事件/关闭窗口的代码的书的标题,以防万一有人谷歌它:“C++ 游戏开发示例”(Kindle 位置/第 1748 页)。

标签: c++ visual-studio sfml


【解决方案1】:

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

key 成员仅在 type 是一种键盘事件类型(sf::Event::KeyPressedsf::Event::KeyReleased)时才处于活动状态。

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


相关文档:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多