• ベストアンサー

Javaでパラパラアニメを作成するには、

どうしたらいいのでしょうか。 初心者なのにイキナリ作ることになってしまいました。 5枚の絵をループでアニメーションさせたいのですが。 フレームを作るところまでは出来たのですが、その先がよく分かりません。どのようにして画像を読み込んで一定のタイミングではなくそれぞれの絵のタイミングでアニメさせればいいのでしょうか、お願い致します。 import java.awt.Insets; import javax.swing.JFrame; public class Animetion { static JFrame frame1; Animetion(){ frame1 = new JFrame("アニメ"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setVisible(true); } public static void main(String[] args) { Animetion gtm = new Animetion(); //インスタンス Insets insets = frame1.getInsets(); frame1.setSize(600 + insets.left + insets.right,400 + insets.top + insets.bottom); } }

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

試しに作ってみました。 私自身経験値があまりないので、変なプログラムかも。 とりあえず、画像の数、画像のファイル名(imgX.gif)、タイミングは決め打ちにしています。 ---------------------------------------------------------------- import java.awt.*; import javax.swing.JFrame; public class Anime{ public static void main(String[] args) { AnimeFrame frame1=new AnimeFrame(); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.pack(); frame1.setBounds(100,100,180,240); frame1.loadImage(); frame1.setTitle("アニメ"); frame1.setVisible(true); Thread th = new Thread(frame1); th.start(); } } class AnimeFrame extends JFrame implements Runnable{ Image[] images = new Image[5]; int[] timing = { 100,100,200,200,100}; int no=0; public void run(){ while(true){ repaint(); try{ Thread.sleep(timing[no]); } catch(Exception e){} } } public void loadImage(){ Toolkit tk; tk = Toolkit.getDefaultToolkit(); for(int i=0;i<5;i++){ images[i]=tk.getImage("img"+i+".gif"); } } public void update(Graphics g) { paint(g); if(++no==8)no=0; } public void paint(Graphics g){ g.drawImage(images[no],40,40,this); } }

megumi0808
質問者

お礼

とりあえず出来ました! 有難うございます! すみません、これらはどうしてこうなるのでしょうか? フレーム作成までは出来たのですが、その後の仕組みがさっぱり分かりません。

その他の回答 (3)

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.4

これ、超基礎ですけど、 できますか? (1)Frame上に文字を表示させてください (2)Frame上に画像を表示させてください (3)「repaint()を使って画面を書き直す(「再描画」させる)デモプログラム」  を作って下さい (4)「スレッドとは何か?」をごく簡単に説明してください これらを理解していれば、 パラパラアニメの仕組みも理解できると思います。 答え (1)http://wisdom.sakura.ne.jp/system/java/awt/Gjava3.html (2)http://wisdom.sakura.ne.jp/system/java/awt/Gjava48.html (3)http://wisdom.sakura.ne.jp/system/java/awt/Gjava8.html http://wisdom.sakura.ne.jp/system/java/awt/Gjava16.html http://wisdom.sakura.ne.jp/system/java/awt/Gjava17.html http://wisdom.sakura.ne.jp/system/java/awt/Gjava18.html (4)http://wisdom.sakura.ne.jp/programming/java/java36.html --- で、最後に、 (5)スレッドを利用して画像をアニメーションさせてください (5)http://wisdom.sakura.ne.jp/system/java/awt/Gjava9.html --- 参考サイト http://wisdom.sakura.ne.jp/ とりあえず質問者さんには、 上記参考サイトの内容を本にした、この本 http://wisdom.sakura.ne.jp/products/books/java_swing.html をとりあえず買っておくことをお奨めします。 値段も安いし。

megumi0808
質問者

お礼

とても分かりやすいサイトですね^^ 空き時間にでもやっていこうと思います。 教えていただいた本、実は以前買おうかさんざん迷った本です^^; Amazonでの評価などもよさげですので、もう一度本屋へ行って買ってこようと思います、、 有難うございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>これらはどうしてこうなるのでしょうか? どうしてと言われても困りますが、、(^^; まず、 他にも方法はありますが、 画像の取り込みと表示 Toolkit tk; Image img; tk = Toolkit.getDefaultToolkit(); img=tk.getImage("img.gif"); みたいな形でメモリ上に読み込みます。 フレームに描画するのは、 public void paint(Graphics g){ g.drawImage(img,x座標,y場所,this); } みたいにして描画します。 パラパラアニメするために、 あらかじめ Image[] images = new Image[5]; のように配列にして for(int i=0;i<5;i++){ images[i]=tk.getImage("img"+i+".gif"); } みたいな感じで読み込んでおきます。 そうしておけば、それぞれの画像を番号で切り換えて描画すればいいです。 repaint(); は、再描画させる命令で update(Graphics) が呼び出されます。 この時に、次に表示する番号を更新しています。 implements Runnable は、Runnable インターフェースを実装するクラスということです。 Runnable インターフェースを実装するクラスは、Run メソッドを実装します。 これで、別スレッドとして呼び出すことができるようになります。 Thread th = new Thread(frame1); th.start(); のようにスレッドを作成し、スレッドの実行を開始します。 すると、Run メソッドが呼び出されて実行されます。 Run メソッドの中で repaint() が呼び出されて、 Thread.sleep(timing[no]); によって指定した時間、時間待ちをします。

megumi0808
質問者

お礼

有難うございました! 半分くらい理解できたような気がします^^; ちょっとずつ覚えていきたいです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1で if(++no==8)no=0; は、 if(++no==5)no=0; ですね。 他の数値もウチで試していた時の数値になっているので、適当に変更してください。

関連するQ&A