到目前为止我使用的每个方法只是冻结了我的程序,但是我希望游戏继续运行,我只是希望屏幕布尔值在X时间为真,然后在时间到期后返回false,是否存在任何方式这样做?感谢。
c.removeEntity(tempEnt);
c.removeEntity(this);
Game.shield = true;
// Wait x time and then do the line below;
Game.shield = false;
答案 0 :(得分:3)
那些说你需要研究线程的人并不十分理解这个问题,imho。
如果你想在游戏中给出超时,你只需要记录它开始的时间,然后检查当前时间与开始时间加上你在游戏循环中的持续时间。像这样:
long shieldStartTime;
long shieldDuration = 10000; //10 seconds
void startShield(){
Game.shield = true;
shieldStartTime = System.currentTimeMillis();
}
//advances your game by one frame, whatever your game loop calls
void step(){
//game loop stuff
if(Game.shield && System.currentTimeMillis() > shieldStartTime + shieldDuration){
Game.shield = false;
}
}
答案 1 :(得分:0)
你有没有尝试过:
Thread.sleep(1000);
答案 2 :(得分:0)
由于您没有提及您的框架,我会建议这样做。如果您将游戏包装在Swing框架中,只需使用javax.swing.Timer
Timer timer = new Timer(delay null);
public Game() {
timer = new Timer(delay, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
Game.stop();
timer.stop();
}
});
}
延迟时间结束后,游戏将停止。您可以使用timer.start();
以任何方式开始游戏。
答案 3 :(得分:0)
你可以试试这个: -
//Your Code here
c.removeEntity(tempEnt);
c.removeEntity(this);
Game.shield = true;
// Wait x time and then do the line below;
int delay = 10000; //delay 10000 milliseconds
try{
Thread.sleep(delay);
}catch(InterruptedException e){
System.out.println("Interrupted ::"+e.getMessage());
}
Game.shield = false;
//Your code here
它工作正常。希望它会帮助你。