当我连续按下一个键时,很明显我的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:别介意我的活动地图,我认为它与暂停无关!
答案 0 :(得分:0)
实际上,我在阅读sfml文档时为懒惰的人voila解决了问题:
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的Pool,因此请检查pollEvent的While之外的事件
仍然感谢您的评论:)