当我继续按下按键时,SFML pollEvent 正在暂停
SFML pollEvent is making pauses when I continuesly press Keys
显然,当我连续按下某个键时,我的 pollEvent 会稍作停顿,
例如,如果按下但不释放某个键,它会调用按下事件,但会暂停 0.5 秒,然后才开始连续调用按下事件
简单地说,如果我只是按下一个键而不松开它,它会给我这样的输出:
按 A
暂停
按 A
按 A
按 A
按 A
。 . .
我的游戏有点问题。
我的 pollEvent 循环:
std::map<_KEYS, bool> Display::checkEvents()
{
resetEvents();
while (_Window.pollEvent(_Event))
{
if (_Event.type == sf::Event::Closed)
quit();
if (_Event.type == sf::Event::KeyPressed) {
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) {
puts("key up pressed");
_Events.at(_KEY_UP) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) {
puts("key down pressed");
_Events.at(_KEY_DOWN) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
puts("key left pressed");
_Events.at(_KEY_LEFT ) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
puts("key right pressed");
_Events.at(_KEY_RIGHT) = true;
}
}
return (_Events);
}
知道为什么吗?或者我该如何解决这个问题?
PS: 别介意我的事件图,我觉得跟停顿真的关系不大
实际上我在阅读 sfml 文档时解决了这个问题,对于懒惰的人来说,瞧:
std::map<_KEYS, bool> Display::checkEvents()
{
resetEvents();
while (_Window.pollEvent(_Event))
{
if (_Event.type == sf::Event::Closed)
quit();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) {
puts("key up pressed");
_Events.at(_KEY_UP) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) {
puts("key down pressed");
_Events.at(_KEY_DOWN) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
puts("key left pressed");
_Events.at(_KEY_LEFT ) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
puts("key right pressed");
_Events.at(_KEY_RIGHT) = true;
return (_Events);
}
您需要检查实时输入而不是 sfml pollEvent 的池,因此请在 pollEvent 的 While
之外检查您的事件
谢谢你的评论:)
显然,当我连续按下某个键时,我的 pollEvent 会稍作停顿,
例如,如果按下但不释放某个键,它会调用按下事件,但会暂停 0.5 秒,然后才开始连续调用按下事件 简单地说,如果我只是按下一个键而不松开它,它会给我这样的输出:
按 A
暂停
按 A
按 A
按 A
按 A
。 . .
我的游戏有点问题。 我的 pollEvent 循环:
std::map<_KEYS, bool> Display::checkEvents()
{
resetEvents();
while (_Window.pollEvent(_Event))
{
if (_Event.type == sf::Event::Closed)
quit();
if (_Event.type == sf::Event::KeyPressed) {
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) {
puts("key up pressed");
_Events.at(_KEY_UP) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) {
puts("key down pressed");
_Events.at(_KEY_DOWN) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
puts("key left pressed");
_Events.at(_KEY_LEFT ) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
puts("key right pressed");
_Events.at(_KEY_RIGHT) = true;
}
}
return (_Events);
}
知道为什么吗?或者我该如何解决这个问题?
PS: 别介意我的事件图,我觉得跟停顿真的关系不大
实际上我在阅读 sfml 文档时解决了这个问题,对于懒惰的人来说,瞧:
std::map<_KEYS, bool> Display::checkEvents()
{
resetEvents();
while (_Window.pollEvent(_Event))
{
if (_Event.type == sf::Event::Closed)
quit();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) {
puts("key up pressed");
_Events.at(_KEY_UP) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) {
puts("key down pressed");
_Events.at(_KEY_DOWN) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
puts("key left pressed");
_Events.at(_KEY_LEFT ) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
puts("key right pressed");
_Events.at(_KEY_RIGHT) = true;
return (_Events);
}
您需要检查实时输入而不是 sfml pollEvent 的池,因此请在 pollEvent 的 While
之外检查您的事件谢谢你的评论:)