2012年2月24日金曜日

キーイベント

サンプルの「Snake」を題材として、アプリ作成の基本をまとめるシリーズです。

第四回目は「キーイベント」です。

「Snake」では、ゲーム操作を矢印キーで行うことになっています。

キーが押されると、それを知らせるイベントが発生します。
まずは、そのイベントを受け取れるようにする必要があります。

Viewがキーのイベントを受け取れるようにするには、以下のメソッドを呼び出して、キー操作やトラックボールでフォーカスできる許可を与える必要があります。

setFocusable(true)


「Snake」では、以下のように設定しています。

【SnakeView.java】
private void initSnakeView() {
setFocusable(true);
---------
}

※尚、画面タッチによるフォーカスを許可するメソッドは、setFocusableInTouchMode(true)です。


これで、Viewでイベントを受け取るための準備ができました。
では、次にイベントを受け取ってからの処理をみてみましょう。

キーが押さて、イベントが発生するとonKeyDownメソッドが呼び出されます。

boolean onKeyDown(int keyCode, KeyEvent event)


受け取る引数の内、keyCodeは操作されたキーを識別する整数値です。
keyCodeの値によって条件分岐すれば、操作されたキー毎に異なる処理をさせることができます。

keyCodeは、KeyEventクラスの中で定数として定義されています。
以下は、定数の一部で、「Snake」で利用されています。

KEYCODE_DPAD_UP 上向き矢印キー
KEYCODE_DPAD_DOWN 下向き矢印キー
KEYCODE_DPAD_LEFT 左向き矢印キー
KEYCODE_DPAD_RIGHT 右向き矢印キー


以下は、「Snake」でのonKeyDownメソッドです。
キーを識別して、ヘビの進む方向を保持しているmNextDirectionメンバ変数を更新しているのがわかります。

【SnakeView.java】
public boolean onKeyDown(int keyCode, KeyEvent msg) {
-------------------------------

if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
if (mDirection != EAST) {
mNextDirection = WEST;
}
return (true);
}

if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
if (mDirection != WEST) {
mNextDirection = EAST;
}
return (true);
}

return super.onKeyDown(keyCode, msg);
}

onKeyDownの戻り値はtrueを返していますが、イベントを処理した場合はtrue、処理しなかった場合はfalseを返すように定義します。

0 件のコメント:

コメントを投稿