
どうしたらいいのでしょうか。
初心者なのにイキナリ作ることになってしまいました。
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);
}
}
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);
}
}
とりあえず出来ました!
有難うございます!
すみません、これらはどうしてこうなるのでしょうか?
フレーム作成までは出来たのですが、その後の仕組みがさっぱり分かりません。
No.4
- 回答日時:
これ、超基礎ですけど、
できますか?
(1)Frame上に文字を表示させてください
(2)Frame上に画像を表示させてください
(3)「repaint()を使って画面を書き直す(「再描画」させる)デモプログラム」
を作って下さい
(4)「スレッドとは何か?」をごく簡単に説明してください
これらを理解していれば、
パラパラアニメの仕組みも理解できると思います。
答え
(1)http://wisdom.sakura.ne.jp/system/java/awt/Gjava …
(2)http://wisdom.sakura.ne.jp/system/java/awt/Gjava …
(3)http://wisdom.sakura.ne.jp/system/java/awt/Gjava …
http://wisdom.sakura.ne.jp/system/java/awt/Gjava …
http://wisdom.sakura.ne.jp/system/java/awt/Gjava …
http://wisdom.sakura.ne.jp/system/java/awt/Gjava …
(4)http://wisdom.sakura.ne.jp/programming/java/java …
---
で、最後に、
(5)スレッドを利用して画像をアニメーションさせてください
(5)http://wisdom.sakura.ne.jp/system/java/awt/Gjava …
---
参考サイト
http://wisdom.sakura.ne.jp/
とりあえず質問者さんには、
上記参考サイトの内容を本にした、この本
http://wisdom.sakura.ne.jp/products/books/java_s …
をとりあえず買っておくことをお奨めします。
値段も安いし。
とても分かりやすいサイトですね^^
空き時間にでもやっていこうと思います。
教えていただいた本、実は以前買おうかさんざん迷った本です^^;
Amazonでの評価などもよさげですので、もう一度本屋へ行って買ってこようと思います、、
有難うございました。
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]);
によって指定した時間、時間待ちをします。
No.2
- 回答日時:
#1で
if(++no==8)no=0;
は、
if(++no==5)no=0;
ですね。
他の数値もウチで試していた時の数値になっているので、適当に変更してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
ボタンの複数割り当てについて
-
C# visibleプロパティをfalseに...
-
JSPファイルから、ActionFormの...
-
Junitテストでvoid戻り値メッソ...
-
[C#.net]スレッド化された別フ...
-
java setterとgetterについて
-
C#でのWNetAddConnection3の使...
-
【Java】画像表示が出来ない!
-
C# 矢印キーの取得
-
クリックして頂点を線で結ぶ
-
C# タスクバーを隠したフォーム...
-
C# WinForm のDataGridView Cel...
-
C#からVC++DLLの呼び出しに失敗...
-
C#でキーイベントが発生しない...
-
JSPやサーブレットでSystem.out...
-
System.err. printlnとSystem.o...
-
IF関数でEmpty値を設定する方法。
-
オブジェクトの中のプロパティ...
-
javaです。 途中まで出来ている...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
C#で、あるクラスのメンバーす...
-
ボタンの複数割り当てについて
-
コンボボックスを使う時の警告
-
C# DataGridView列カスタマイズ
-
Junitテストでvoid戻り値メッソ...
-
C# 矢印キーの取得
-
C# WinForm のDataGridView Cel...
-
C#でのWNetAddConnection3の使...
-
C# visibleプロパティをfalseに...
-
GOF本のStrategyのJava版での質...
-
イメージボタンを作成したいの...
-
以下のコードのどこが問題なの...
-
Androidでこのエラーを解決した...
-
C#で、定数をフラグ(if文)に...
-
C# 親フォームで指定した値を...
-
Javaでウィンドウ作成について
-
負の数を取得するには?
-
Windowsのリソース作成について
-
javaの同期について
おすすめ情報