簡體   English   中英

從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以來的時間。

PS:我個人會使用標准庫的時間點和持續時間,因為我在SFML上玩的不是很多,但是它可以做同樣的事情。 另外,由於我已經有一段時間沒有接觸SFML了,所以我的代碼中可能存在錯誤。

SFML的sf::Clock提供了getElapsedTime()方法。 它返回一個sf::Time對象,您可以調用asMiliseconds()來獲取轉換為毫秒的時間。 更多信息在這里這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM