タイルを含むボードがあり、タイルには障害物が含まれています。障害物は、いくつかのタイプ (壁、レーザーなど) のいずれかです。
ゲームのすべてのラウンドで、すべての障害物を実行するボードを実行します。障害物が実行され、何かが変更されると、GUI に通知され、影響を受けたタイルが更新されます。
GUI では、タイルはオーバーラップ イメージ (JLabels) を含む OverLayLayout であるため、オーバーラップ イメージはすべて表示されます。
問題は、それらを実行すると高速になり、何も起こらないことです。たとえば、レーザー ビームが表示されない場合、プレーヤーが損傷することはありますが、実際に発生することはありません...
そこで、ユーザーが GUI の更新を確認できるように、ゲームをたとえば 500 ミリ秒待機させようとしました。試してみました (ただし、間違っている可能性があります): タイマー、swingtimers、countdownlatch などですが、うまく動作しないようです。これを修正する方法についてのアイデアはありますか? それとも、待機の代わりになるのでしょうか?
前もって感謝します!
更新: ボードでの実行は次のようになります。
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();
}
});