我有一块包含瓷砖的瓷砖,瓷砖包含障碍物。障碍物可以是几种类型之一(墙壁,激光,......)。
每一轮比赛我都会执行棋盘,这可以解决所有的障碍。一旦障碍物被执行并且某些内容发生了变化,就会通知GUI并刷新受影响的磁贴。
在图形用户界面中,图块是包含重叠图像(JLabel)的OverLayLayout,因此所有重叠图像都是可见的。
现在的问题是,当我执行它们时,它会变得很快,你不会发生任何事情。例如。你没有看到激光束出现,播放器会被损坏,但你没有看到它发生......
所以我试着让游戏等待,例如500ms所以用户可以看到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();
}
});
答案 0 :(得分:4)
如果没有看到您的代码,很难确定问题;我怀疑你是在阻止事件派遣线程。
此基于图块的game使用javax.swing.Timer
的实例来制作游戏动画。按 A 启用动画,然后单击自由方块以查看效果。您可以调整游戏方法。