複数のスプライトに単一のPNG画像を使用するにはどうすればよいですか?シンプルな2Dゲームを作ろうとしていますが、20以上の異なる画像ファイルは必要ありません。それらを1つのPNGファイルに入れたいだけです。
例
minecraftのterrain.png
(とitems.png
)には異なるタイルがあり、16x16ピクセルの各領域はブロックの異なるテクスチャに使用されます。
誰かがコードと説明を提供できますか?
数年前に 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 で入手できます。