龍谷大学> 理工学部> 数理情報学科> Team539> 樋口三郎> 担当科目> 2007 年> iアプリ/S!アプリ/オープンアプリを作ろうプロジェクト---数理情報演習>第 06 回

Panel/Form/Timer

[目次|前回|次回|携帯Javaのページ|ローカルドキュメント]
Time-stamp: "2007-11-15 Thu 14:13 JST hig"

Panel/Form

ユーザに, 選択肢から一つを選んでもらったり, テキストを入力してもらったりする GUI 画面をPanel(Doja), Form(MIDP)といいます. そのなかでももっとも簡単な, TextBoxの使い方の例TextBoxSample.java を見てみましょう. 入力結果は, GUI 画面の中に反映させることもできますし, Canvas に反映させることもできます.

他にもいろいろな部品があります. 使い方の例 PanelSample.java を見てみましょう. イメージも使っていますので, 下の画像ファイルをresフォルダにいれましょう.

ファイル名gifpng
pose0

デフォルトでは, 部品は上からつまっていきますが, レイアウトマネージャを使うと, ある程度, 配置を制御できます.

また, 上の例TextBoxSample.javaでは, キー操作でアプリを正常終了できるようになっています. IApplication.terminate(), Midlet.destroyApp() を 呼び出せばいいのです.

タイマーによるアニメーション

これまでのアニメーションは, スレッドを作り, その中で sleep を含む while ループを回すことにより, 時間的にほぼ一定間隔で, 特定の処理が実行される, という仕組みによるものでした.

ここでは, もうひとつ, 別の仕組みでアニメーションをしてみましょう. Timer クラスを使うと, 一定時間後に(あるいは一定時間ごとに繰り返し)特定のメソッドを呼び出すことができます.

呼び出される特定のメソッドは iアプリと MIDP(S!/EZアプリ)で少し違います. iアプリの場合 Timer クラスの setListener メソッドで指定されたクラスの, TimerExpired メソッドです. MIDPの場合 Timer クラスの schedule メソッドで指定されたクラスの, run メソッドです.

次の例TimerAnimSampleを参考に, Canvas クラスで2画像切り替えのアニメーションをしましょう.

今回の例は, また画像ファイルが必要です.
ファイル名gifpng
pose0.gif
pose1.gif

タイマーによるイベント

アニメーションの例では, 比較的短い時間で繰り返し発生する Timer を使いました. もう少し長い時間にタイマーを使えば, ゲーム開始後ちょうど1分で UFO 出現, みたいなことが 簡単にかつ正確にできます(スレッドをつかって, 1分間 sleep した後 UFO 出現, でも似たようなことができるわけですが). キッチンタイマーなども作れます(これは時刻を取得するメソッドを使って, 時刻の差を計算するほうがいいかもしれませんが)

課題

課題1

これまでに作ったアニメーションに, 1分ごとに背景の色が変るとか, 3分後にボスキャラが出現するとか, 5分後にゲームのやり過ぎすよというメッセージがでるとか, 何かタイマーを使った機能を追加しよう.

課題2

これまでに作ったアニメーションを, Thread を使うのをやめて, Timer を使って書き直してみよう.