所以我正在使用SFML开发游戏,我知道有一个函数isKeyPressed(key)
,它返回类型bool
。
然而,我需要一种方法来按下第一次按键后按下时间,返回一个整数,表示自第一次按下该键以来的毫秒数(如果当前未按下则为0)。
这样的功能存在吗?如果不是,我将如何编写一个,可能使用sf::Clock
功能?
答案 0 :(得分:1)
您只需要监听按键事件(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
声明后的时间。
答案 1 :(得分:0)