【发布时间】: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.key。 See. -
似乎奏效了。谢谢你。如果您将其发布为答案,我会将其标记为已回答。所以它很可能在我离开/进入窗口时触发了一个事件,它因为无法读取而崩溃?
-
@Einar
event是 several structures 的并集。这意味着正在生成和处理大量事件。要处理正确的,你需要知道它的类型,否则你会得到一个UB -
我明白了。谢谢。
-
添加给我处理事件/关闭窗口的代码的书的标题,以防万一有人谷歌它:“C++ 游戏开发示例”(Kindle 位置/第 1748 页)。
标签: c++ visual-studio sfml