0

だから私は自分で作ったコンソールゲームを持っていて、それを2Dにすることを考えました。これまでのところ、すべてが順調でした。動きなどは問題なく動作しています。そして、私がこの考えを思いつくまで、絵は大丈夫でした。

(私の「マップ」はTile [] []です)レイヤーを表すクラスを作成する際に、再生可能なマップはLayer []になり、レイヤーを相互に描画して、メモリに保存することを考えました。より高速な描画。

これは「いい」/「大丈夫」なアイデアだと思いました(いいアイデアかどうか教えていただければ幸いです)

問題は、2つのレイヤーを使用すると、2番目のレイヤーが常に最初のレイヤーを台無しにすることです。「マップ」を描画するために使用するコードは次のようになります。

    for (TileLayer layer : layers)
        g.drawImage(layer.getImage(), 0, 0, null);

layer.getImage()は正しいです(確かに、1つのレイヤーでのみ機能します)。問題は、2つのレイヤーを描画すると、2番目のレイヤーが最初のレイヤーのすべてを黒く塗りつぶしてしまうことです。私は次のようなレイヤー描画コードを持っています:

    BufferedImage img = new BufferedImage(tiles.length * Tile.TILE_SIZE,
                                          tiles[0].length*Tile.TILE_SIZE, 
                                          ColorSpace.TYPE_RGB);

    for (int x = 0; x < tiles.length; x++) {
        for (int y = 0; y < tiles[0].length; y++) {
            //System.out.println("ID:" + tiles[x][y].getId());
                img.getGraphics().drawImage(tiles[x][y].getImage(),
                                        x * Tile.TILE_SIZE,
                                        y * Tile.TILE_SIZE,
                                        null);
        }
    }

そのjavaアプレットは、「ペイント」をオーバーライドしていましたが、これを変更しました。私は「空気」を表すために透明な画像を使用してみました(これはおそらくそれを台無しにしたはずだと思いました)。描画すべきでないときに描画を防ぐための条件を追加してみました。

間違った方法で動作するものを作成した可能性があります。これを行うための適切な方法についてのヘルプがあればいいのですが。(またはどこが間違っているのか教えてください)

4

1 に答える 1

1

この例では、BufferedImageタイプとして間違った定数を使用しているように見えます。

BufferedImageで透過性を許可する場合は、最後のパラメーターをBufferedImage.TYPE_INT_ARGB(または最後のビットに「A」が含まれるBufferedImageの型定数の1つ)に設定します。

于 2012-05-05T22:51:58.323 に答える