2013-08-28 42 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