0

我有一个包含瓷砖的板,而瓷砖包含障碍物。障碍物可以是几种类型之一(墙壁、激光……)。

每一轮游戏我都会执行棋盘,棋盘会执行所有的障碍。一旦执行了障碍并且发生了某些变化,GUI 就会收到通知并刷新受影响的图块。

在 GUI 中,tile 是一个包含重叠图像 (JLabels) 的 OverLayLayout,因此所有重叠图像都是可见的。

现在的问题是当我执行它们时,它会很快,你什么也不会发生。例如,您没有看到激光束出现,播放器将被损坏,但您没有看到它发生...

所以我试图让游戏等待例如 500 毫秒,以便用户可以看到 GUI 更新。我尝试过(但可能做错了):计时器、摆动计时器、倒计时……但我似乎无法让它工作。有想法该怎么解决这个吗?或者也许是等待的替代方案?

提前致谢!

更新: 板内执行如下所示:

Iterator<Obstacle> it = obstacles.iterator();
while (it.hasNext())
    it.next().execute(this);

CountDownLatch countDown = new CountDownLatch(1);
setChanged();
notifyObservers(countDown);
countDown.await();

GUI板的更新功能(被通知)如下所示:

final CountDownLatch countDown = (CountDownLatch) arg;
SwingUtilities.invokeLater(new Runnable(){
   public void run() {
      try {
        updateUI();
        wait(500);
      } catch (InterruptedException ex) { }
            countDown.countDown();
   }
});
4

1 回答 1

4

没有看到你的代码,就很难发现问题;我怀疑您正在阻止事件调度线程。

这个基于瓷砖的游戏使用一个实例javax.swing.Timer来动画播放。按A启用动画,然后单击一个空闲方块查看效果。您也许可以根据您的游戏调整该方法。

于 2012-05-23T19:15:41.930 回答