Image を保持し、Graphics オブジェクトの drawImage メソッドのオーバーロードを使用して、画像のどの部分をどこに描画するかを指定できます。
g.drawImage(image, x1, y1, x2, y2, srcX1, srcY1, srcX2, srcY2);
[javadoc](http://slick.cokeandcode.com/javadoc/org/newdawn/slick/Graphics.html#drawImage(org.newdawn.slick.Image, float, float, float, float, float, float, float を参照) 、 浮く))
最初のパラメーターは、イメージのインスタンスです。次の 2 つのパラメーターは、レンダリングが開始される画面上のポイントを定義します。X2 と y2 は、レンダリングの終点を定義します。通常、x2 は x1 + spriteWidth で、y2 は y1 + spriteHeight ですが、これらの値を変更して、スプライトを異なるサイズで描画できます。最後の 4 つのパラメーターは同じように機能しますが、画面に描画されるスプライト シートの領域を定義します。
あなたの例を取り上げて、3 番目の行から 2 番目のタイルを描画したい場合、呼び出しは次のようになります。
int tileWidth = 8;
int tileHeight = 8;
int sourceX = 40;
int sourceY = 8; //as its the sec
int drawX = 34;
int drawY = 65;
g.drawImage(image, drawX, drawY, drawX + tileWidth, drawY + tileHeight
, sourceX, sourceY, sourceX + tileWidth, sourceY + tileHeight);
スプライト シートを使用する場合、一部 (非常にまれなケース、主にテスト) でハードコーディングされた値と、ソース x1、x2、y1、および y2 値が格納されているスプライト クラスがあります。それらの束をリストまたはマップにパックして、スプライト インデックスを作成することができます。通常、何らかの方法で定義を生成してからリストをシリアル化するので、必要に応じてそのリストを簡単にリロードできます。
これは私の XML 定義の短い例です (xml には x2 と y2 の値ではなく幅と高さを保存します。これは、人間が読みやすく、手動で編集する方が便利だからです。逆シリアル化の後、x2 と y1 の値を計算します。 ):
<spriteSheet imageName="buildings" name="buildings">
<sprite name="1x2 industry 01" spriteX="0" spriteY="0" width="50" height="112"/>
<sprite name="1x2 quarters 01" spriteX="50" spriteY="0" width="50" height="112"/>
<sprite name="1x1 spaceport 01" spriteX="243" spriteY="112" width="51" height="56"/>
...
</spriteSheet>