next up previous
Next: 4.1 アニメーション Up: ソフトウェア第三 講義資料 配列,スレッド応用,アニメーション,シミュレーション Previous: 3 スレッドの中断と再開

4 スレッドを用いたアニメーション

アニメーションは,絵を描く処理を繰り返し実行する ことによって可能となる. 車の表示を動かすプログラムは以下のようになる.
// AnimationCar.java
//<APPLET code="AnimationCar.class"
// width=220 height=120>
//</APPLET>

import java.awt.*;
import java.applet.*;

public class AnimationCar extends Applet
                        implements Runnable
{
  private Thread trig = null;
  private int x;
  public void start() {
    if (trig == null) {
      trig = new Thread(this); trig.start();
    }
  }
  public void init() {x = 200; }
  public void run() {
    while (trig != null) {
      repaint();
      try { Thread.sleep(125); }
      catch (Exception e) {
           showStatus("Error: " + e);
      }
      x -= 5;
      if (x == 0) x = 200;
    }
  }
  public void paint(Graphics g)
    {
      g.drawRect(x+50,40,150,30);
      g.fillOval(x+80,70,20,20);
      g.fillOval(x+150,70,20,20);
      g.drawLine(x+80,40,x+120,10);
      g.drawLine(x+120,10,x+170,10);
      g.drawLine(x+170,10,x+190,40);
      g.drawString("Hello",x+120,60);
    }
}
ここでの例では,Appletクラスを継承したユーザクラスに さらに,Runnableインタフェースを実装させることでアニメーションを実現して いる. アプレットは,init,start, paintのメソッドを順に呼び出す. Runnableインタフェースをもつ場合,startのメソッドの中で threadを生成し,そのthreadを起動すれば,そのthreadの中の runメソッドが並行処理される.runの中では, repaintメソッドが呼び出されるようにする. repaintメソッドは, 画面をクリアーし,paintメソッドを 呼ぶupdateメソッドを呼び出している. updateメソッドを定義しておかなければ ユーザは,paintメソッド に表示したい手続きを書いておけば, 画面をpaintごとに消した後 表示を行う.



generated through LaTeX2HTML. M.Inaba 平成18年5月7日