next up previous
次へ: 先頭部に追加するコード 上へ: ボールの運動シミュレーション・プログラム 戻る: スタートボタン(jToggleButton1)

Timer処理

ボールの動きをシミュレートするには、一定時間間隔で ボールの移動にあわせて画面を書き換える動作が必要になる。 このアニメーションを実現するために、BeansのTimerコンポーネントを 利用する。

フォームエディタを表示し、

  1. 「選択モード」アイコンをクリックした後、
  2. コンポーネントパレットの Beans タブをクリックして
  3. 表示されるTimerを選択する(クリックする)。
  4. フォームエディタ内の適当な場所でマウスをクリックすると、 図48に示すように、コンポーネントツリーの 「他のコンポーネント」の下に「timer1[Time]」という表示が アイコンとともに追加される。
  5. ここで、コンポーネントシート内の Delay 値を 200 に書き換える。

図 48: Timerコンポーネント(Beans)
上で書き換えた Delay は、タイマーの割り込み時間を決めるもので、 ミリ秒を単位とした値である。 したがって、ここでは 0.2秒間隔でアニメーションのコマを進めることになる。

次に、タイマーによる割り込み処理を登録する。 これからアニメーションの各コマ毎のボールの動作と、 ボールの描画方法を登録する。

49に示すように、 フォームエディタ内の「接続モード」アイコンをクリックした後に コンポーネントツリー内のタイマをクリックする。

図 49: ソースエディタ

50に示すようにソースイベントを timerの下のonTimeイベントを選択し、スタートボタンの場合と同様に、 ターゲット操作指定においてユーザーコードを選択し以下に示す ソースコードをソースエディタにより入力する。

図 50: onTimeイベント

青色の行を入力する:

private void timer1OnTime(...) {
   if(jToggleButton1.isSelected()) {
       if(g == null) gInit();
       x += vx;
       if(x<0) {
          x = -x;
          vx = -vx;
       } else if(x > w) {
          x = 2*w - x;
          vx = -vx;
       }
       vx *= a;
        
       if(jCheckBox1.isSelected()) vy++;
       y += vy;
       if(y < 0) {
          y = -y;
          vy = -vy;
       } else if(y > h) {
          y = 2*h-y;
          vy = -vy;
       }
       vy *= a;
       repaint();
   }
}
timer1OnTime(タイマー処理)

上記の他に、次のコードを追加する必要がある。



Subsections

平成15年7月26日