私は現在、楽しみのためにコネクト フォー ゲームを作成しており、落下アニメーションを追加するのがクールだと判断したとき、ちょうど完成しました。これを行うためのいくつかの異なる方法を知っていますが、何が「最善」になるかはわかりません。
私の GUI は JComponents で構成されているので、javax.swing.Timer
スレッドの安全性のために使用する必要があると考えました。
ActionListener update = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
};
};
Timer timer = new Timer(10, update);
timer.start();
私の本当の質問は、ゲームボードを更新するにはどうすればよいですか? repaint()
(おそらくrepaint(Rectangle rec)
)呼び出してすべてを処理するpaint()
か、接続フォーピース用の別のクラスを作成して、そのコンポーネントをGUIに追加する方がよいでしょうか。
私のコネクトフォーピースの他のクラスは現在これです...
public class Piece extends JLabel{
private Color color;
private Ellipse2D circle;
public Piece(Color color, int radius) {
this.color = color;
circle = new Ellipse2D.Float(0, 0, radius, radius);
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
super.paintComponent(g2);
g2.setColor(color);
g2.fill(circle);
}
}
コンポーネントを GUI に追加すると、現在使用しているタイマーが高速であるため、かなり頻繁にinvalidate()
andを呼び出す必要があり、 .validate()
repaint()
私はこれらの方法の両方を試しましたが、どちらもうまくいくようですが、どちらがより効率的かわかりませんか? 学習目的のために、必要以上に負担をかけたくありません。
また、私が考えていた方法よりも良い方法があれば教えてください。私はすべての提案を受け入れます