- 締切済み
javaでアニメーションを簡単に作るには?
5枚の絵をループでアニメーションさせたいのですが。フレームを表示させるところまでは出来たのですが、その先がよく分かりません。どのようにしてアニメーションすればいいのでしょうか? よろしくお願い致します。 package animation; import java.awt.*; import javax.swing.*; public class Animation extends JFrame implements Runnable{ Animation () { getContentPane ().setLayout (new FlowLayout ()); setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); setSize (200, 300); setVisible (true); Thread th = new Thread (); th.start (); } public void start(){ } public void run(){ } /** * @param args the command line arguments */ public static void main (String[] args) { // TODO code application logic here Animation anime = new Animation (); } }
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- amanojaku1
- ベストアンサー率54% (265/488)
「MainPanelDesign.java」の「import org.dyno.visual.swing.layouts.~」は Java 標準パッケージではありません(恐らく「Visual Swing for Eclipse」のパッケージです)ので、 Java 標準の開発環境ではエラーになります。
- amanojaku1
- ベストアンサー率54% (265/488)
蛇足になりますがアンドロイド端末などでは、必ず自分の端末以外の解像度を考慮する必要があります。 単純なモノなら開発環境(つまり自分の端末)を基準にし、使用される端末の解像度との倍率を計算して拡大・縮小してやれば大体 それで対応できるハズです。 ただしゲームのようなモノでは この方法では対応できない場合があり、僕がアンドロイド用テトリスを作った時は、使用される端末の解像度(実際は SurfaceView コンポーネントの解像度)でグラフィックの描画サイズを計算して対応しました。
- amanojaku1
- ベストアンサー率54% (265/488)
後、個人個人によってディスプレーの解像度が違うので、見え方が小さすぎたり大きすぎたりしてしまう可能性があります。 ディスプレーの解像度を取得し、「Frame、Canvas、イメージ、必要なら その他 GUI 部品」などを拡大・縮小してやると良いでしょう。 僕の作った ImgApp 内にもディスプレーの解像度の取得が記述されています(当然 import も お忘れなく)。 > GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); > GraphicsDevice gd = ge.getDefaultScreenDevice(); > GraphicsConfiguration gc = gd.getDefaultConfiguration(); > System.out.println("ScreenWidth="+gc.getBounds().getWidth()); > System.out.println("ScreenHeight="+gc.getBounds().getHeight());
- amanojaku1
- ベストアンサー率54% (265/488)
確か Java Application の場合、処理を普通にスルーさせると、Application が終了してしまうハズです。 僕の作った Appletcation 場合はスレッドを作り、その中で wait し、join でメインのスレッドを停止させています。 Frame(JFrame)の終了イベント時に notify で上記の wait を解除し、上記のスレッドを終了させ、上記の join を通過させています。 このような処理はテンプレートして作っておいた方がいいでしょう(僕の場合は そのテンプレートとして Appletcation を作ってある訳です)。
- amanojaku1
- ベストアンサー率54% (265/488)
> "i0001.gif", "i0002.gif", "i0003.gif", "i0004.gif", "i0005.gif", > "i0006.gif", "i0007.gif", "i0008.gif", "i0009.gif", "i0010.gif", ↑これは当方に連番の"gif"イメージ・ファイルが有ったから使っただけなので、当然「jpg、png」イメージ・ファイルとかでも OK です(連番である必要すらないんですが)。
- amanojaku1
- ベストアンサー率54% (265/488)
ちなみに Java2 用 Canvas(JCanvas) は存在しません、どうも JPanel を Canvas として使えみたいな感じです。
- amanojaku1
- ベストアンサー率54% (265/488)
> アニメーションを簡単に作る ▼このプログラムの肝は下記の通りです。 パス、イメージ・ファイル名の設定。 > static String vsImagePath = "Img/"; > static String[] d1vsImageFile = new String[]{ > "i0001.gif", "i0002.gif", "i0003.gif", "i0004.gif", "i0005.gif", > "i0006.gif", "i0007.gif", "i0008.gif", "i0009.gif", "i0010.gif", > }; ▼イメージ・ファイルの読み込み。 > for(int i = 0; i<d1vsImageFile.length; i++){ > try { > d1oBImage[i] = ImageIO.read(new File(vsImagePath+d1vsImageFile[i])); > } catch (IOException e) { > e.printStackTrace(); > } > } ▼スレッド処理、イメージを oPaintImage にセットし、「repaint」して Canvas(JPanel) の「paint」メソッドを呼び出してから、「iAnimationInterval」ミリ秒の間 Sleep する。 > th = new Thread(new Runnable( ){ > @Override > public void run(){ > while(true){ > for(int i = 0; i<d1oBImage.length; i++){ > oPaintImage = d1oBImage[i]; > oMainApp.repaint(); > try { > Thread.sleep(iAnimationInterval); > } catch (InterruptedException e) { > e.printStackTrace(); > } > } > } > } > }); > th.start(); ▼ Canvas(JPanel) の「paint」メソッド内でイメージ(oPaintImage)を Draw する。 > if(null!=oPaintImage){ > x = 0; y = 0; > w = oPaintImage.getWidth(this); > h = oPaintImage.getHeight(this); > oGraphic2D.drawImage(oPaintImage, x, y, w, h, this); > }