第8回 キーボードに合わせてグラフィックを動かすゲームでは,キャラクターをキーボード操作に合わせて動かす必要がある(必ずしもそうではないが,たいていある)。今回はiアプリのゲームでキーボードを読み取る方法を説明しよう。
キーボードを読み取るにはグラフィックはCanvasというオブジェクトを使い描画するということを第6回で紹介した。Canvasはゲームでの利用を考慮して作られたNTTドコモのライブラリで,キーボードの読み取りは「低レベルイベント処理」を使って行うようになっている。 低レベルイベント処理なんていうと難しそうだが,「前処理をしていない状態のイベント処理」という風に理解すればいい。 Canvasを作成してiモードの画面に表示すると,そのCanvasに対して発生したイベント──たとえばユーザーがキーを押したとか,タイマーイベントが発生したといったイベントが起こると,そのイベントが全部,CanvasのprocessEvent()というメソッドに送られる仕組みになっている。プログラマがprocessEvent()を上書きして,そこにキーボードイベントを読み取って何かをする……本稿の主題ならグラフィックを動かすという手続きを書けばいい。 たとえば,次のような具合である。 class MyCanvas extends Canvas { Canvasには,キーボードの状態を読み取るgetKeypadState()というメソッドが用意されている。上のprocessEvent()メソッドの中で,getKeypadState()を呼び出して,今,ユーザーが押したキーを知ることができる。 getKeypadState()で読み取れるキーコードは,NTTドコモが供給しているAPIガイドの13ページに記されているが,少し分かりづらいかもしれないので後のリストも参考にして欲しい。 落とし穴がいっぱいここまで分かれば,あとは簡単そう……と思う人もいると思うが,そう甘くはない。 プレーヤーがキーを押し続けるならキャラクターも動き続けるように作るのが普通だ。一方,キーボードイベントはキーを押したときと離したときにしか発生しない。単純にprocessEvent()の中でgetKeypadState()を使ってキーを読み取るだけにしておくと,プレーヤーがキーを連打しないとキャラクターを動かせない,ということになってしまい,ユーザーからクソゲーの汚名を着せられそうだ。 キーを押し続けるのに合わせてキャラクターを動かすには,キーを常に読み取る仕組みが必要で,それにはタイマーを使う。Canvasには便利なShortTimerという簡単に使えるユーティリティクラスが用意されている。 ShortTimerで,Canvasに対してインターバルタイマー(指定した間隔で常に発生するタイマー)とワンショットタイマー(指定した時間の後に発生したら,それで終る1度きりのタイマー)が利用できる。となれば,インターバルタイマーを使ってキーを読み取ろう,と誰もが考えると思う。筆者もそう考えた。 しかし,インターバルタイマーは,ちょっとしたタイミングで簡単に止まってしまう仕様なので注意が必要だ。どういうタイミングで止まるか詳しいことは筆者もよく分からないのだが,とにかく止まってしまうので扱いに困る。 確実に止まらないようにするには,ワンショットタイマーを使い,イベントが起こるたびにタイマーをスタートさせてキーボードを繰り返し読むという方法がいいようだ。 また,タイマー解像度(機種によって異なる)を下回るタイマー時間を設定すると,まともに動かないことがあるので,その点にも注意して欲しい。タイマー解像度を取り出すgetResolution()というメソッドがあるが,このメソッドはShortTimerを作った後でないと使えない。一方,ShortTimerは作成時にタイマー時間を設定しなければならない。 一体,どうすればいいっていうんだ? と言いたくもなるが,仕様だから仕方がない。ダミーのタイマーを作成してタイマー解像度を得て,それから本物のShortTimerを作るという方法も考えられるが,いたずらにプログラムサイズを増やす可能性もある。一応,今のところ100ミリ秒以上を設定しておけば,たいていは大丈夫のようなので,そうしておけばいい。 さて,以上のような知識を総動員して作ったサンプルをリスト1に示そう。総動員しても,たったこれだけのリストでOKだ。このリストは,Jarアーカイブに収めたnya.GIFという画像を,携帯の上下左右キーに合わせて画面上で動かすサンプルだ。http://gadget.mda.or.jp/i/ImageDemo.htmlからダウンロードできるので試してみてほしい。
関連記事 [米田 聡,ITmedia] Copyright © ITmedia, Inc. All Rights Reserved. モバイルショップ
最新CPU搭載パソコンはドスパラで!!
最新スペック搭載ゲームパソコン
FEED BACK |