私はこのスプライトシート持っている:私はspriteとして使用されるように、それの一部を抽出するために、この画像ファイルを読み込むことができますどのようにこの画像の一部をJavaで抽出するには?
Pacman sprites http://i39.tinypic.com/145nvp.png
を?
私はこのスプライトシート持っている:私はspriteとして使用されるように、それの一部を抽出するために、この画像ファイルを読み込むことができますどのようにこの画像の一部をJavaで抽出するには?
Pacman sprites http://i39.tinypic.com/145nvp.png
を?
スプライト領域がBufferedImage
に読み込まれた場合、getSubimage
メソッドを使用して、スプライトシートのサブイメージを取得できます。
getSubimage
方法は、所望のサブイメージのx
、y
、及びwidth
とheight
を取るので、所望のスプライトを得ることができます。ほとんどのスプライトは同じサイズであるように見えるので、大部分の画像を繰り返し処理するためにループのネストされたfor
ループによってそれらのほとんどを取り出すことができると思います。
たとえば、ImageIO
クラス(たとえばread
メソッド)を使用してスプライトイメージがロードされ、各スプライトのサイズが10ピクセル×10ピクセルの場合、スプライトは5行5列のスプライトになります。得られる次
BufferedImage bigImg = ImageIO.read(new File("sheet.png"));
// The above line throws an checked IOException which must be caught.
final int width = 10;
final int height = 10;
final int rows = 5;
final int cols = 5;
BufferedImage[] sprites = new BufferedImage[rows * cols];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
sprites[(i * cols) + j] = bigImg.getSubimage(
j * width,
i * height,
width,
height
);
}
}
はキャッチがすべてのスプライトが同じサイズであれば、当然のことながら、上記のコードはのみ動作しますが、そのために働くために行われ、いくつかの調整をすることが必要となります
指定されたスプライトシート。いくつかのコードをお願いしますか? –
申し訳ありませんが、私は誤ってポストアンサーボタンを押しました。私は答えにもっと追加します。 – coobird
* i *と* j *インデックスは* getSubImage()*コールでスワップする必要があります。 –
スプライトを描画したいだけならば、JavaのGraphicsクラスにはdrawImageメソッドがあり、画像の特定の領域を引き出します。君は。 Graphicsオブジェクト(x、y、width、height)にスプライトを描画したい場所と、スプライトがどのフレームのフレームにあるか(x、y、width、height)を指定する必要があります。 。幅とスプライトの高さを想定し
は、あなたが描画領域に描画する同じ幅と高さ
void drawSpriteFrame(Image source, Graphics2D g2d, int x, int y,
int columns, int frame, int width, int height)
{
int frameX = (frame % columns) * width;
int frameY = (frame/columns) * height;
g2d.drawImage(source, x, y, x+width, y+height,
frameX, frameY, frameX+width, frameY+height, this);
}
columns
を次のように、あなたはスプライトのフレームを描画するために、独自のメソッドを定義することができますあなたのスプライトシートにいくつの列があるかです。このメソッドの最初の2行は、シート内のスプライトフレームの任意のx位置を計算します。
シートにある大きなスプライトには特別な処理が必要です。これらのスプライトに使用するx、y、幅、および高さを手動で把握することができます(この場合、大きな画像ごとに4つのスプライトを描画します)。
あなたのスプライトシートは、通常のシート(すべてが同じサイズをスプライト)であり、それはあなたがあるとして、あなたは以下のメソッド呼び出し
Toolkit tk = Toolkit.getDefaultToolkit();
Image pacman = tk.getImage(getURL("pacman.png"));
...
drawFrame(pacman, g2d, x, y, 15, 19, 25, 25);
と20フレームを引く5×15パターンに配置された場合
ここで、xとyはGraphicsオブジェクトにスプライトを描画する位置、15はスプライトシートの列数、19はフレーム番号(0から始まる番号)、25は幅と高さです。各スプライト(私は近似した)。
これは、http://gamedev.stackexchange.com/に適している可能性があります。 –