【问题标题】:SFML 2.0: Keyboard::isKeyPressed not always returning correctlySFML 2.0:Keyboard::isKeyPressed 并不总是正确返回
【发布时间】:2012-09-02 05:38:24
【问题描述】:
bool m_down = sf::Keyboard::isKeyPressed(sf::Keyboard::Key::M);
bool up_down = sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Up);
bool down_down = sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Down);
bool left_down = sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Left);
bool right_down = sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Right);

这段代码基本上是唯一相关的代码。

当我同时按住其他一些键和 M 和一个 [n] 箭头键 [s] 时,它似乎在按下 m 时返回 false。 (虽然是这样)

我没有代码对其进行操作、破坏等操作,如果可能的话,我想了解一下为什么会发生这种情况,以及如何解决它。

如果没有办法修复它,那么你能告诉我使用事件系统在我这边重新制作这个功能的最佳方法吗?

【问题讨论】:

  • This 可能会有所帮助。
  • 嗯,如果我也使用基于事件的方法,这是否适用?
  • 我相信是的。每当您按下太多键时,键盘都会忽略和后续按键,直到其中一个键出现。无论如何,构建一个测试用例进行仔细检查应该不难。
  • 好的,谢谢你的帮助。如果您只是将其放入答案中,我会接受,以便您从中获得一些代表。

标签: c++ sfml


【解决方案1】:

根据 cmets,this link here 解释说键盘存在固有限制。大多数键盘在任何给定时间只能注册一定数量的按键,并忽略任何后续按键,直到您释放一个或多个当前按键。这不适用于修饰键(如 Ctrl、alt 和 shift),因为这些键被特殊处理(因为它们旨在与其他键一起使用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多