ゲームには、描画だけでなく、イベント処理が必要だ。具体的には、ユーザーからのキー入力を受け取り、それに応じた処理をする。
カードゲームを作る場合、カードをキーで選択しなくてはならない。processEventは、何かキーが押される/離されると、システムが呼ぶメソッドである。
キーが押された時には、Display.KEY_RELEASED_EVENTが、キーが離された時には、Display.KEY_RELEASED_EVENTが引数paramに代入されて呼ばれるので、何かが押された時にそのキーを取得するプログラムは以下のようになる。
|
このようにして取得したキーイベントを、メイン処理内で判断し、それぞれの処理を行う。
|
例えば、左ボタンを押すと、eventにはDisplay.KEY_LEFTが代入されている。その下にそのキーが押されたときに実行したい処理を記述する。
この例では、左(右)を押すとカーソルを1つ左(右)に動かしている。決定キーを押した場合は、現在のカーソル位置のカードを記憶する。
repaint2()は、任意のタイミングでpaintメソッドを呼び出すもので、
|
現在のキャンバスのGraphicsオブジェクトを取得し、それを引数として、paintを呼んでいる。
では、カーソル描画をしてみよう。
|
Graphics.fillRectで黒く塗りつぶした矩形を描き、その上に画像を描画している。
このままビルドしてみると、カーソルが移動した跡が残ってしまう。またカーソルを速く動かすと、画面がちらついて見えることがある。
これを解消するためには、前述のプログラムの前に画面を消去する(全画面を白く塗りつぶす)文を追加する。加えて、すべての描画処理をロックすると、いちいち描画せずに、一回のpaintごとにまとめて描画するようになる。
画面を背景色(デフォルトは白)で塗りつぶす処理は、
|
getWidth()はその端末の描画可能な画面幅を、getHeight()は画面高を返してくれるので(機種によって値が異なる)、(x,y)=(0,0)〜(画面幅,画面高さ)まで、つまり全画面を消去できる。
描画をロックするには、以下の2文で描画処理を囲む。
|
この間に描画処理を記述することで、画面のチラツキが発生しなくなる。
今回は、文字や矩形や画像を表示し、キーを押すことでカーソルを動かすアプリを作成した。しかし、これではまだゲームとはいえず、まったく遊ぶことができない。
次回は、乱数やタイマーを使った「遊ぶことができるアプリの作り方」をレクチャーする。
ここまでのプロジェクト(ソースコードと画像)は、ここからダウンロードできる。zipファイルを解凍してできたフォルダ(src,res)を、Cardプロジェクトのフォルダに上書きすれば、ビルド・実行が可能だ。
何といっても、ゲームアプリ作成に一番必要なのは、“クリエイティブ魂”だ。講座を読んで、「こんなことができそうだ」と感じたら、ソースを改造したり、付け加えてみたりして、いろいろとチャレンジしてほしい。
|
Copyright © ITmedia, Inc. All Rights Reserved.