5

複数のスプライトに単一のPNG画像を使用するにはどうすればよいですか?シンプルな2Dゲームを作ろうとしていますが、20以上の異なる画像ファイルは必要ありません。それらを1つのPNGファイルに入れたいだけです。

minecraftのterrain.png(とitems.png)には異なるタイルがあり、16x16ピクセルの各領域はブロックの異なるテクスチャに使用されます。

誰かがコードと説明を提供できますか?

4

1 に答える 1

2

数年前に Java ゲームを書いたので、役立つアドバイスやコード サンプルを提供できれば幸いです。

次のように、スプライトを 1 つの画像にまとめることができます。

https://github.com/mikera/tyrant/blob/master/src/main/resources/images/creature32.png

上記の例では 32x32 のスプライトを使用しています。任意のサイズを使用できますが、規則的に保つのに役立ちます。

次に、ゲーム中に画面を描画するときに、それぞれのスプライトを選択して、適切な場所に描画します。

コードは次のようになります。

public void drawImage(Graphics g,double x, double y, int image) {
    int px = (int)((x - scrollx) * TILEWIDTH);
    int py = (int)((y - scrolly) * TILEHEIGHT);
    int sx = (image%20) * TILEWIDTH;
    int sy = TILEHEIGHT * (image/20);
    g.drawImage(sourceImage, px, py, px + TILEWIDTH,
            py + TILEHEIGHT, sx, sy, sx + TILEWIDTH, sy + TILEHEIGHT,
            null);
}

ここで、int image使用するスプライト シート上の位置へのインデックスです。スプライト シート内でスプライトを 1 つ右に移動するには 1 増加し、スプライトを 1 つ下に移動するには 20 増加します。

より完全なソース コードは、https ://github.com/mikera/tyrant/blob/master/src/main/java/mikera/tyrant/MapPanel.java で入手できます。

于 2012-09-02T11:44:56.840 に答える