如何在一段时间循环中使用时钟

How to use a clock within a while loop

本文关键字:时钟 循环 一段时间      更新时间:2023-10-16

我正在编写一个游戏,我一直在尝试实现暂停游戏功能,当用户按下时,游戏将暂停,并且在再次按下 R 的 x 次后,游戏将恢复。当用户按下 R 时,我已经让它工作,当按下任何其他键(如 M)时,游戏将正常恢复。但是,当我将 R 分配给暂停和取消暂停事件时,会检测到暂停和取消暂停的初始 R,并且游戏暂停几分之一秒并恢复。我尝试在暂停循环中实现计时器和计数器,但无济于事。我真正想做的是让用户必须等待 x 时间才能再次按下 R,这将解决问题,但由于某种原因我无法让clock.getElapsedTime在循环中工作。这是为什么呢?这是我当前的代码:

case sf::Keyboard::R:
        pause = true;   
        break;

//pause game
        clock1.restart();
        while (pause)
        {               
            //cout << clock1.getElapsedTime.asSeconds();
            //if (clock1.getElapsedTime.asSeconds() > 1.0)
            //{
                if (sf::Keyboard::isKeyPressed(sf::Keyboard::R))
                    pause = false;
            //}
        }

尝试放置 sf::sleep(sf::seconds(0.1));在你的 while 循环之前。我有同样的问题。不知何故,如果我读取同一个字母的 isKeyPressed() 的值,因此在我第二次阅读它时它不会改变,并且会假设它仍然被按下。在那里稍加停顿解决了我的问题,所以试试它是否确实解决了你的情况。

告诉我它是否有效,我很感兴趣