[英]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了,所以我的代码中可能存在错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.