すべてのグラフィックを保持する JPanel キャンバスを作成しました。つまり、JLabel. アニメーション化されたスプライトを機能させるには、拡張された JLabel クラスの paintComponent をオーバーライドする必要があります。この方法で、アニメーション化されたスプライトを正常に実装しました。
Graphics2D キャンバスを作成してから、独自の Graphics2D に複数の「画像」を作成するのは悪い習慣ですか?
すべてのグラフィックを保持する JPanel キャンバスを作成しました。つまり、JLabel. アニメーション化されたスプライトを機能させるには、拡張された JLabel クラスの paintComponent をオーバーライドする必要があります。この方法で、アニメーション化されたスプライトを正常に実装しました。
Graphics2D キャンバスを作成してから、独自の Graphics2D に複数の「画像」を作成するのは悪い習慣ですか?
あなたのは、渡されるものと同じである必要がGraphics2D
ありますが、境界とオフセットが異なるため、それほど重いものになるとは思いません。JPanel
JLabel
つまり、Swingは、オブジェクトの階層内のすべての要素に表示できる新しいグラフィックコンテキストを割り当てませんが、異なる機能で同じものを使用します。これはそれを意味するものではありませんpanel.getGraphics() == label.getGraphics()
が、どちらも完全に異なるオブジェクトではありません。
いずれにせよ、多くのアニメーション作業を行う必要がある場合は、独自のスプライトクラスを用意することをお勧めします
class Sprite
{
Point2D position;
Rectangle2D size;
float rotation;
}
すべてを同じpaintComponent
レベルで処理します。または、Java2Dは、コンテンツの移動/アニメーション化のためにレイヤーごとに使用されるように作成されたCoreAnimationとは異なるため、少なくとも私は常にそのようにしています。