2013-08-28 43 views
0

我正在創建一個Java 2D平臺遊戲,並且我在玩家死後獲得動畫時會遇到一些麻煩。當玩家死亡時,所有敵人都會被移除,並在他們曾經玩過的地方玩過爆炸動畫。同時,玩家開始眨眼。我想要繼續大約兩秒鐘,然後讓我的setState()方法切換到「PlayerDeadState」,這基本上是重試或返回到主菜單選項屏幕。我用Thread.sleep(),但它不起作用,我聽說它對GUI線程不好。 這裏是我的代碼:什麼是暫停線程的好方法?

public void update() { 
// check if player is dead 
     if(player.dead == true) { 

      player.flinching = true; 

     for(int i = 0; i < enemies.size(); i++) { 
      Enemy e = enemies.get(i); 
      e.update(); 
      e.hit(200); 
      if(e.isDead()) { 
       enemies.remove(i); 
       i--; 
       eExplosions.add(
        new Explosion(e.getx(), e.gety())); 
      } 
     } 



     gsm.setState(3); 
    } 
} 

的動畫到底,如果我註釋掉我setState()方法。這個問題是我現在不能同時擁有這個事實。動畫,或加載必要的GameState。我想要兩個。 :P

有什麼建議嗎?

+0

所以基本上,當你在一個線程睡眠階段,一切都將停止,直到睡眠是完整的。你需要做的是對所有事情進行狀態檢查。如果玩家處於死亡狀態,那麼這意味着其他一切都不應該被激活,並且不會使用thread.sleep()(僅僅因爲它會停止整個線程) – Kevin

+0

啊。我想了很多。我試圖完成的是在更改GameState之前讓動畫播放。如果沒有某種停頓,動畫不會播放,並且GameState在播放器死後幾乎立即發生變化。 – 16trohrt

回答

1

你可以利用振盪定時器:

ActionListener listener = new ActionListener(){ 
    public void actionPerformed(ActionEvent event){ 
     gsm.setState(3); 
    } 
}; 
Timer timer = new Timer(2000, listener); 
timer.setRepeats(false); 
timer.start(); 
+0

我沒有想過揮杆定時器。非常感謝! :d – 16trohrt