java中的延迟/定时器

时间:2014-01-15 16:51:12

标签: java

到目前为止我使用的每个方法只是冻结了我的程序,但是我希望游戏继续运行,我只是希望屏幕布尔值在X时间为真,然后在时间到期后返回false,是否存在任何方式这样做?感谢。

    c.removeEntity(tempEnt);
c.removeEntity(this);
Game.shield = true;
// Wait x time and then do the line below;
Game.shield = false;

4 个答案:

答案 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

它工作正常。希望它会帮助你。