2012-02-07 14 views
0

完全な解決策を見つけるためにオンラインで探していましたが、今のところ一緒に収まらない部分しか見つけることができません。アニメーションと表示用のスプライトシートのサブ画像を分離する

イメージファイルを見て、ファイルをループしてスプライトを分離して保存できるプログラムを探しています。その後、私はそれを表示することができるようにそのスプライト情報に再アクセスする方法が必要ですが、自分の数式に基づいてタイルを表示できるようにしたいと思います。小さな地形のタイルで高度な戦争のようなゲームを考えてみましょう。これらのタイルを半無作為に表示できるようにしたいのですが、自分のパラメータ内に表示することができます。

私はまた、上記の画像と同じサイズのスプライトを持つ別の画像ファイルをロードすることができますが、これらの画像はアニメーションに使用することができます。

私は64x64ピクセルスプライトの束を持つ2スプライトシートを持っています。画像ファイルの1つはすべて私の地形タイルです。もう一つは私のユニットタイルです。スプライトを読んで、私が好きなように表示できるようにしたい。

私の人生の中では、これをどのように行うのかわかりません。私はSubimagingとdrawImageを調べましたが、情報を適切に保存または再表示することはできません。

ありがとうございました。

編集:私は自分のために、そして他の人のために私の質問を単純化しました。

次のコードはなぜ機能しませんか?

package animation; 

import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class AnimTest 
{ 
public static void main(String[] args) 
{ 
    AnimTest test = new AnimTest(); 
    test.go(); 
} 

public void go() 
{ 
    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    MyDrawP drawP = new MyDrawP(); 
    frame.getContentPane().add(drawP); 
    frame.setSize(500,500); 
    frame.setVisible(true); 
} 
    } 

    class MyDrawP extends JPanel 
    { 

public void drawSprite(Graphics g) 
{ 
    try { 
     BufferedImage bigImg = ImageIO.read(new File("C:/Users/scott/Desktop/Personal Work/Pixel Art/terrain.png")); 

     final int width = 64; 
     final int height = 64; 

     int x = 0; 
     int y = 0; 

     bigImg.getSubimage(x, y, width, height); 
     g.drawImage(bigImg, 5, 5, this); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
    } 

ごめんなさい、コードブロックを適切にフォーマットする方法がわかりません。

これでMyDrawPクラスは自分のファイルを見て、0,0から始まる64x64の部分をつかんで保存し、それを保存してフレームに追加します。私はかなり問題は、drawSpriteメソッドは呼び出されないことですが、いつ呼び出すべきかわかりません。何か他のものがないかどうかわかりません。

また、上記のコードはなぜ機能しませんか?

おかげ

+0

http://docs.oracle.com/javase/tutorial/uiswing/painting/step2.htmlを見る[ 'ImageLabelPanel'(http://stackoverflow.com/a/3078354/230513)有用であり得ます。 – trashgod

+0

..あなたに質問がありますか? –

答えて

1

MyDrawPクラスのpaintComponent(Graphics)メソッドをオーバーライドし、そこからdrawSpriteを呼び出す必要があります。

その後、あなたは「抽出物」のサブ画像やあなたのJPanelの上でそれらを描く方法は、再加工する必要があります。

bigImg.getSubimage(x, y, width, height) 

は、あなたが提供するコードに0,0にサブイメージ(実際には常に1を返します。 )、あなたが何か持っている必要がありますので:もちろん

Image subImage = bigImg.getSubimage(x,y,width,height) 

を、次の行ではなくbigImgのサブイメージを使用する必要があります...

そして、あなたは最終的にあなたが「ランダム」を選択する方法を実装する必要があります描画するサブイメージ、JPanelで描画する場所を指定します。

0

私たちはゲームのためのアニメーションを作成するために、スプライトシートを使用し、生徒を家庭教師ました。助けることができるいくつかのスプライト切削プログラムがありますが、私が望むものはありませんでしたので、私は自分自身を書きました。 Javaでは、低レベルのピクセル処理を行い、スプライトの開始位置と終了位置を把握し、それらを「カット」することができます。

スプライトシートを基本的にBufferedImageに、getPixelを使用して、スプライトの開始位置と終了位置を確認してください。その後、getSubimageを使用して、それぞれのスプライトを別のイメージに書き込むことができます。しかし、のハード部分は、のスプライトを整列しているため、アニメーションがどこにでもジャンプしません。私はアニメーションを見ることができ、手でアライメントを行うためのGUIを作成しました。あなたが私にあなたの電子メールを送ったら、私はそのソースを送ることができます。または、どこかにアップロードすることができます。

関連する問題