あなただけのイメージを維持して描画する場所を指定するには、GraphicsオブジェクトのdrawImageメソッドのオーバーロードを使用することができます
た画像の一部:
g.drawImage(image, x1, y1, x2, y2, srcX1, srcY1, srcX2, srcY2);
参照[javadocツール](のhttp://ツルツル.cokeandcode.com/javadoc/org/newdawn/slick/Graphics.html#drawImage(イメージ、浮動小数点数、浮動小数点数、浮動小数点数、浮動小数点数、浮動小数点数、浮動小数点数、浮動小数点数)
最初のパラメータはイメージのインスタンスです。次の2つのパラメータは、レンダリングが始まるスクリーン上のポイントを定義します。 X2とY2はレンダリングの終点を定義します。通常、x2はx1 + spriteWidth、y2はy1 + spriteHeightですが、これらの値を変更してスプライトをさまざまなサイズで描画することができます。 最後の4つのパラメータは同じですが、画面上に描画されるスプライトシートの領域を定義します。
私たちはあなたの例を取ると、私たちは、コールは次のようになり三行目から二番目のタイル描きたい場合:
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);
を私はspritesheetで作業する場合、私は非常にまれな(いくつかの値をハードコードされていますケース、主にテスト)とソース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>