スレッドとアニメーション (8/9)
作成:2010-01-14 21:15
更新:2014-09-04 07:56
更新:2014-09-04 07:56
■イメージを合成してアニメーションする
では、サンプルを作ってみましょう。ここでは背景に「haikei.gif」(横250×縦150)、その上に重ねて表示するイメージに「chara.gif」(横縦共に50)というイメージファイルをクラスファイルと同じ場所に用意し、これを読み込んで動かすことにします。
下のソースコードがサンプルです。だいたいこんな感じになりました。先の例と同様、「GO」した後に「change」すれば動く方向がランダムに設定されます。
下のソースコードがサンプルです。だいたいこんな感じになりました。先の例と同様、「GO」した後に「change」すれば動く方向がランダムに設定されます。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
import java.awt.*; import java.awt.event.*; public class Test12 extends Frame implements ActionListener,Runnable { MyCanvas c1; Button b1,b2; Image offImg,img1,img2; Thread t1; int lastX,lastY,moveX,moveY; boolean KissOfDeath; public Test12() { super(); setTitle("Hello"); setSize(300,250); setLayout(null); lastX = 0; lastY = 0; KissOfDeath = false; Toolkit tk = Toolkit.getDefaultToolkit(); img1 = tk.getImage("haikei.gif"); img2 = tk.getImage("chara.gif"); c1 = new MyCanvas(); c1.setBounds(25,25,250,150); this.add(c1); b1 = new Button("GO"); b1.setBounds(25,200,100,25); b1.addActionListener(this); this.add(b1); b2 = new Button("change"); b2.setBounds(175,200,100,25); b2.addActionListener(this); this.add(b2); } public static void main (String args []) { new Test12().setVisible(true); } public void actionPerformed(ActionEvent ev) { if (ev.getSource() == b1) { if (img1!= null && img2 != null && offImg != null){ KissOfDeath = ! KissOfDeath; if (KissOfDeath){ t1 = new Thread(this); t1.start(); } } } if (ev.getSource() == b2) { moveX = (int)(Math.random() * 21 - 11); moveY = (int)(Math.random() * 21 - 11); } } public void run(){ Graphics g = offImg.getGraphics(); try { while(KissOfDeath){ if (lastX + moveX < 0 || (lastX + moveX) > (c1.getWidth() - 50)){ moveX *= -1; } if (lastY + moveY < 0 || (lastY + moveY) > (c1.getHeight() - 50)){ moveY *= -1; } lastX += moveX; lastY += moveY; g.drawImage(img1,0,0,this); g.drawImage(img2,lastX,lastY,this); c1.repaint(); t1.sleep(100); } } catch(Exception e){ System.out.println(e); } g.dispose(); } class MyCanvas extends Canvas{ public void update(Graphics g){ paint(g); } public void paint(Graphics g){ if (offImg == null){ offImg = createImage(250,150); } g.drawImage(offImg,0,0,this); } } }
※関連コンテンツ