【发布时间】:2020-10-15 15:08:49
【问题描述】:
我正在用 java 重新创建经典的街机游戏 Space Invaders。我的问题是在杀死敌人后处理精灵时出现的。由于死亡精灵是敌人可以拥有的精灵之一,我基本上要做的是改变显示的精灵,然后移除敌人的对象。有没有办法让精灵显示大约一秒钟,然后移除敌人的物体?我也愿意接受其他方式来做这样的事情,因为它可能不如我没有想到的其他选项那么有效。
编辑:我之前应该提到过这一点,但是任何涉及休眠线程的事情都会导致整个游戏延迟,这是行不通的。
// stuff detecting collision between missile and enemy
missiles.remove(0);
enemies.get(j).loadImage(2); // loads death sprite for enemy that got hit
// one second delay
enemies.remove(j);
编辑:我找到了解决问题的方法。使用摇摆计时器类,我能够在显示死亡精灵后创建延迟,然后将敌人移除。发布这个以防遇到类似问题的人需要它。
Timer timer = new Timer(600, new ActionListener() {
public void actionPerformed(ActionEvent e) {
enemies.remove(remove); // The enemy is removed when after the allotted delay occurs when timer.start() is called
}
});
// final code after changes
missiles.remove(0);
enemies.get(j).loadImage(2);
remove = j;
timer.setRepeats(false); // makes it so that only one enemy is removed
timer.start(); // after the delay the enemy is removed, enough time for the death sprite to be shown for the allotted delay
【问题讨论】:
-
我已经尝试过了,但效果不佳,因为它会停止整个游戏一秒钟。
-
你用的是什么 gui 框架?您通常不能只在 Event Dispatch Thread 中添加睡眠。
-
你有主游戏循环吗?你可以只记得在 N 循环迭代中移除敌人而不是阻塞
-
如果您使用的是 Swing,那么 SwingWorker 可以单独处理 UI 线程。它不会挂起你的 UI 线程。
标签: java