私は Java で簡単なライフ ゲーム プログラムを書いていますが、アニメーション化するのに少し苦労しています。次のペイント メソッドを使用して、ピクセルのグリッドを表示するLifeDrawというJComponentクラスがあります。
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (int y = 0; y < lGrid.getHeight(); y++) {
for (int x = 0; x < lGrid.getWidth(); x++) {
if (lGrid.getCell(x,y) == 1) {
g.setColor(Color.red);
g.fillRect(x * lGrid.getSqSize(), y * lGrid.getSqSize(), lGrid.getSqSize(), lGrid.getSqSize());
} else {
g.setColor(Color.white);
g.fillRect(x * lGrid.getSqSize(), y * lGrid.getSqSize(), lGrid.getSqSize(), lGrid.getSqSize());
}
}
}
}
次に、メソッドを持つ別のクラスLifeGridrun()
が呼び出されたときに、1 世代のピクセルのグリッドを更新してから を呼び出しますLifeDraw.repaint()
。run()
ただし、ループで呼び出そうとすると、ループが終了するまでJComponentは再描画されないため、表示されるのは最初の世代と最後の世代だけです。おそらく更新が速すぎて再描画できないと考えたのでThread.sleep()
、繰り返しの間に使用してみましたが、それでも同じ問題がありました. 理論的には (または、少なくとも私はそうなることを望んでいました)、反復ごとにコンポーネントを再描画し、ピクセルの変化のアニメーションを表示する必要があります。
私はJava GUIに精通していないので、助けていただければ幸いです。うまくいけば、私はそれを十分に明確に説明しました。そうでなければ教えてください!