2016-02-12 123 views
0

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

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; 
      //} 
     } 
+1

什么的注释行打印? – immibis

+0

它提出了一个错误,并不打印任何东西,如果你指的是cout语句 – agtv

+1

什么是错误? – immibis

回答

1

试着将SF ::睡眠(SF ::秒(0.1));在你的while循环之前。我有同样的问题。不知何故,如果我读同一个字母的isKeyPressed()的值,那么当我第二次读它时它就不会改变,并且会认为它仍然被按下。稍微停顿一下解决了我的问题,所以试试它是否能解决你的问题。

告诉我,如果它的作品,我很感兴趣

+0

我已经得到它的工作,我听说,在游戏中放入睡眠会减慢速度,但thx的回应!我会选择你作为最佳答案 – agtv

+0

由于睡眠并不经常发生,因此它不会太慢,因为程序无论如何都在等待人类的反应,而且通常不会那么快。 – Liza

+0

你可以分享你的修复方法吗? – Liza