繁体   English   中英

从SFML中按下按键以来,我如何获得时间?

[英]How do I get time elapsed since key pressed in SFML?

因此,我正在使用SFML开发游戏,并且我知道有一个函数isKeyPressed(key) ,该函数返回类型bool

但是,我需要一种方法来获取自第一次按下该键以来的时间,并返回一个整数,该整数表示自第一次按下该键以来的毫秒数(如果当前未按下则为0)。

是否存在这样的功能? 如果没有,我将如何使用sf::Clock功能编写一个?

您只需要侦听按键事件( sf::Event::KeyPressed )并启动某种计时器即可:将当前时间存储在sf::Clock并使用getElapsedTime()检索经过的时间。

这是监听事件的方法:

sf::Event event;
sf::Clock clock;
while (window.pollEvent(event))
{
    if (event.type == sf::Event::KeyPressed) {
        // A key was pressed, start your sf::Clock
        clock.restart();
    }
}
// ...
clock.getElapsedTime();

如果您想要特定于键的时钟,则需要指定是否要像这样对待每个键,其中很多还是很少。

编辑 (根据您的评论):如果要处理每个键,则需要一个sf::Keyboard::KeyCount sf::Clock数组。 然后,您可以独立地重新启动每个键的时钟。 像这样的东西:

sf::Event event;
std::array<sf::Clock, sf::Keyboard::KeyCount> keyClocks;
while (window.pollEvent(event))
{
    if (event.type == sf::Event::KeyPressed) {
        // A key was pressed, start this key sf::Clock
        keyClocks[event.key.code].restart();
    }
}
// ...
keyClocks[sf::Keyboard::A].getElapsedTime();

请注意,如果访问未按下相应键的键时钟,则可能会得到一些奇怪的未初始化内容,或者可能是自声明keyClocks以来的时间。

PS:我个人会使用标准库的时间点和持续时间,因为我在SFML上玩的不是很多,但是它可以做同样的事情。 另外,由于我已经有一段时间没有接触SFML了,所以我的代码中可能存在错误。

SFML的sf::Clock提供了getElapsedTime()方法。 它返回一个sf::Time对象,您可以调用asMiliseconds()来获取转换为毫秒的时间。 更多信息在这里这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM