gpt4 book ai didi

java - 刷新 Swing 图形用户界面

转载 作者:行者123 更新时间:2023-12-01 19:04:24 24 4
gpt4 key购买 nike

我有一个包含图 block 的棋盘,而图 block 包含障碍物。障碍物可以是多种类型之一(墙壁、激光……)。

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

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

现在的问题是,当我执行它们时,它会变得很快,你不会发生任何事情。例如。你没有看到激光束出现,播放器就会被损坏,但你没有看到它发生......

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

提前致谢!

更新:板中的执行如下所示:

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();
}
});

最佳答案

如果不查看代码,就很难找出问题所在;我怀疑您正在阻塞事件调度线程。

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

关于java - 刷新 Swing 图形用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10726034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com