如何获得自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
以来的时间。
SFML有提供getElapsedTime()
方法的sf::Clock
。它返回一个sf::Time
对象,您可以在该对象上调用asMiliseconds()
以将时间转换为毫秒。
相关文章:
- 为什么根据测量位置测量经过的时间时会有很大的不同?
- 如何比较两个经过的时间?
- 为什么这个经过的时间(帧时间)计算会锁定我的游戏
- 获取标准::未来<T>::wait_for的经过时间
- C++ 时间机器无法正确计算经过的时间量
- 填充 unordered_map (c++) 后 malloc 的经过时间
- 自当地时间上午8点以来,将时间经过的时间与Boost
- 如何获得Microsoft TTS演讲的经过的时间
- 获取自C++执行以来经过时间的最干净,最简单的方法
- 在 Linux 中,非常高的经过(挂钟)时间和低系统时间的含义
- 16.66ms 帧时间.当 sleep() 只经过整毫秒时,你如何获得完美的 60 fps
- 以格式化字符串的形式获取经过的时间
- 如何在C++中检查经过的时间和分配的内存
- 在visualc++2010中经过的时间
- 如何在没有计时器的情况下确定经过了多少时间
- 如何获得自SFML中按下键以来经过的时间
- 在经过时间后做某事C++SFML 2
- 试图使用gettimeofday来查找以毫秒为单位的经过时间
- 以C++记录经过时间的正确方法
- 以复数表示的实际经过时间