[英]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.