0

C# では、SpriteBatch クラス(XBOX ゲームの XNA プラグイン) を既に見ました。そのクラスでは、レイヤーでペイントすることが可能です。Javaで同じことをしたいのは、ブレードを作成しているためです(他の質問を参照してください)。すべてのゲームオブジェクトからArrayListがあり、そのリストは正しいペイントリーダーで作成されていません。

例: 私はドアを持っていますが、ドアはプレーヤーに描かれています。

マルティン

4

2 に答える 2

2

アイテムのリストを並べ替えると問題が解決するはずですが、レイヤーをペイントする必要がある場合は、次のように実行できます。

レイヤーごとに 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);
    }
于 2009-09-02T16:21:20.613 に答える
1

レンダリングする前にアイテムを並べ替えてみませんか? バックグラウンド アイテムを最初にペイントし、フォアグラウンド アイテムを最後にペイントする必要があります。

リストがあり、アイテムが比較可能な場合は、使用できます

Collections.sort(list);

特別注文が必要な場合は、独自の Comparator を実装できます。

もちろん、アイテムが z 位置に関する情報を保持する必要があります。

また、ペイント メソッドでこれを行うべきではありません。アイテムが変更されたときにアイテムをソートします。追加した。

于 2009-09-02T14:47:53.540 に答える