2012-02-23 10 views
0

APIを検索してSpriteSheetを検索しましたが、サイズの異なるスプライトでスプライトシートを作成する方法が見つかりませんでした。Slick2Dでスプライトのサイズが異なるスプライトシートを使用

私が使用しているスプライトシートには、16x16pxタイルの行、その下に24x24pxタイル、その下に8x8pxの行などがあります。

元々、Slick2Dを使用していないので、Spriteシートの一時的なBufferedImageから各スプライトを取得するためにBufferedImage.getSubimage()を使用しました。私が使用できるのと同じ方法がここにありますか?

答えて

1

少なくとも現在のこのAPIの現バージョンでは、直接のサブイメージを作成する方法はないと思います。

しかし、私は(今言ったメソッドを追加するオプションに加えて、自分自身を呼び出す - それは、すべての後にopen sourceだ)と考えることができる3つの可能なオプションがあります。

  1. はあなたからいくつかのSpriteSheetオブジェクトをインスタンス化でき同一のソースファイルにそれらを保持したい場合は、同じソースのImageを各スプライトサイズに1つずつ追加します。
  2. Imageインスタンスを使用し、getSubImageを呼び出してImageを各サイズ(24x24,16x16など)の3つのイメージに分割することができます。次に、それらのサブイメージから、SpriteSheetsをインスタンス化します。
  3. ソースファイルをサイズに基づいて別々のファイルに分割することができます。つまり、24x24スプライトセルを1つのファイルに、16x16を別のファイルに、というようにします。
0
あなただけのイメージを維持して描画する場所を指定するには、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> 
関連する問題