gpt4 book ai didi

c++ - 如何获得在 SFML 中按下按键后耗时?

转载 作者:行者123 更新时间:2023-11-28 06:43:36 24 4
gpt4 key购买 nike

所以我正在使用 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 了。

关于c++ - 如何获得在 SFML 中按下按键后耗时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com