C# では、SpriteBatch クラス(XBOX ゲームの XNA プラグイン) を既に見ました。そのクラスでは、レイヤーでペイントすることが可能です。Javaで同じことをしたいのは、ブレードを作成しているためです(他の質問を参照してください)。すべてのゲームオブジェクトからArrayListがあり、そのリストは正しいペイントリーダーで作成されていません。
例: 私はドアを持っていますが、ドアはプレーヤーに描かれています。
マルティン
アイテムのリストを並べ替えると問題が解決するはずですが、レイヤーをペイントする必要がある場合は、次のように実行できます。
レイヤーごとに BufferedImage を作成する
BufferedImage[] bi = new BufferedImage[3];
bi[0] = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
バッファリングされた画像にペイントする
Graphics2D bg2 = bi[0].createGraphics();
bg2.drawXXX(...);
それはすべて、実際の paint メソッドの外にある必要があります。
paint または paintComponent メソッドで、アルファ合成を使用してレイヤーを組み立てる
AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f);
g2.setComposite(ac);
for (int i = 0; i < bi.length; i++) {
g2.drawImage(b[i], 0, 0, this);
}
レンダリングする前にアイテムを並べ替えてみませんか? バックグラウンド アイテムを最初にペイントし、フォアグラウンド アイテムを最後にペイントする必要があります。
リストがあり、アイテムが比較可能な場合は、使用できます
Collections.sort(list);
特別注文が必要な場合は、独自の Comparator を実装できます。
もちろん、アイテムが z 位置に関する情報を保持する必要があります。
また、ペイント メソッドでこれを行うべきではありません。アイテムが変更されたときにアイテムをソートします。追加した。