ShortTimerでのアニメーション

「アニメーション」と言えば「スレッド」で、そうするとRunnableインタフェースが出てきて・・・というのがお約束だったんですが、iαppliではShortTimerというのが使えます。取り敢えずこれでアニメーションを実現してみましょう。ImageSample04.javaを作ります。

早速、コードを見ていきましょう。まずはImageSample04startメソッドです。

public void start() {
    ShortTimer timer = ShortTimer.getShortTimer(canvas, 0, 500, true);
    Display.setCurrent(canvas);
    timer.start();
}

はじめにShortTimer.getShortTimer(canvas, 0, 500, true)ShortTimerを取得してます。

getShortTimerの引数はgetShortTimer(Canvas canvas, int it, int time, boolean repeat)となってて、time時間後にcanvasにタイマイベントを通知します。ここではrepeattrueにして、繰り返しイベントを通知させるようにしてます。

で、Display.setCurrent(canvas)canvasを表示させた後、timer.start()でタイマをスタートさせます。

タイマがスタートしたので、あとはそのタイマイベントを受け取るほうの処理です。ImageCanvasprocessEventを見てきましょう。

public void processEvent(int type, int param) {
    if (type == Display.TIMER_EXPIRED_EVENT) {
        count++;
        if (count >= N_IMAGES) {
            count = 0;
        }
        repaint();
    }
}

タイマイベントはTIMER_EXPIRED_EVENTとしてprocessEventに渡されます。そこでイベントタイプを調べて、TIMER_EXPIRED_EVENTがきたときだけ処理させてます。処理内容は前とおんなじ。

さて、できました。一連の流れを踏んで試してみましょう。

D:\iAppli>ijavac ImageSample04.java
D:\iAppli>iprev ImageSample04 ImageCanvas
D:\iAppli>cd output
D:\iAppli\output>jar cvMf image04.jar ImageSample04.class ImageCanvas.class images

ImageSample04.class を追加中です。(入 = 490) (出 = 315)(35% 収縮されました)
ImageCanvas.class を追加中です。(入 = 1738) (出 = 958)(44% 収縮されました)
images/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
images/01.gif を追加中です。(入 = 776) (出 = 671)(13% 収縮されました)
images/02.gif を追加中です。(入 = 785) (出 = 681)(13% 収縮されました)

ADFはimage04.jamです。

ダウンロード用HTMLはhttp://www.segi.org/i/j/t/にあるので、iαppl対応携帯をお持ちの方はお試し下さい。

さて、ここからはオマケの話し。

ImageSample04startメソッドでは

Display.setCurrent(canvas);
timer.start();

のように「canvasを表示」させてから「timerをスタート」してます。これを

timer.start();
Display.setCurrent(canvas);

「timerをスタート」させてから「canvasを表示」する順番にすると何も起こらなくなります。お試しください。

何故かというと、ShortTimer.start()は登録されているCanvasが表示されていないときに呼び出されても何もしないからです。ShortTimer.start()を呼ぶときは、登録したCanvasが表示されているようにしましょう。


前の項目へ次の項目へ
「iαppliであそぼう!」のページへ
せぎてつ伝言板
このページの感想をどうぞ!
お名前(匿名OK):

メールアドレス:
Valid CSS! 最終更新日 : 2000年2月12日(月)
tetsu@segi.org