戻る 04. キー入力の受け付け 次へ

今回はキー入力の受付です。

MIDPでの機能とJ-PHONE用の機能のどちらも説明します。
出来るだけならauへの移植が簡単に出来るようにしたいですしね(^^)





J-PHONE専用のキー入力
J-PHONE用のキー入力取得命令では現在のキー状態を取得できます。 これはどのビットがONになっているかで調べる事が出来ます。 対応表を以下に書きますのでご覧ください。 全てのキーが割り当てられていますね。
キー 2進数 10進数 16進数
0キー 00000000 00000000 00000000 00000001 1 0x00000001
1キー 00000000 00000000 00000000 00000010 2 0x00000002
2キー 00000000 00000000 00000000 00000100 4 0x00000004
3キー 00000000 00000000 00000000 00001000 8 0x00000008
4キー 00000000 00000000 00000000 00010000 16 0x00000010
5キー 00000000 00000000 00000000 00100000 32 0x00000020
6キー 00000000 00000000 00000000 01000000 64 0x00000040
7キー 00000000 00000000 00000000 10000000 128 0x00000080
8キー 00000000 00000000 00000001 00000000 256 0x00000100
9キー 00000000 00000000 00000010 00000000 512 0x00000200
*キー 00000000 00000000 00000100 00000000 1024 0x00000400
#キー 00000000 00000000 00001000 00000000 2048 0x00000800
上キー 00000000 00000000 00010000 00000000 4096 0x00001000
左キー 00000000 00000000 00100000 00000000 8192 0x00002000
右キー 00000000 00000000 01000000 00000000 16384 0x00004000
下キー 00000000 00000000 10000000 00000000 32768 0x00008000
選択キー 00000000 00000001 00000000 00000000 65536 0x00010000
ソフトキー1 00000000 00000010 00000000 00000000 131072 0x00020000
ソフトキー2 00000000 00000100 00000000 00000000 262144 0x00040000
ソフトキー3 00000000 00001000 00000000 00000000 524288 0x00080000
右上キー 00000000 00010000 00000000 00000000 1048576 0x00100000
左上キー 00000000 00100000 00000000 00000000 2097152 0x00200000
右下キー 00000000 01000000 00000000 00000000 4194304 0x00400000
左下キー 00000000 10000000 00000000 00000000 8388608 0x00800000
このように全てのビットが別々に割り当てられているので 同時にどのキーが押されているかも取得可能です。 デバイスコントロールを受ける為に宣言します。 DeviceControl devCtl = DeviceControl.getDefaultDeviceControl(); キー状態の取得命令は int key = devCtl.getDeviceState( DeviceControl.KEY_STATE ); です。 さてそれでは実際にソースを追いながら見ていきましょう。 まずキー受付用の関数を作りましょう。 名前は何でもかまいませんがわかりやすく void Key() とでもしてみましょう。 ==== ソース ==== import com.j_phone.system.DeviceControl;//デバイスコントロール使用のため(J-PHONE専用) public void Key() { // キー状態の取得(J-PHONE用) int key = devCtl.getDeviceState( DeviceControl.KEY_STATE ); if ( ( key & 0x00001000 ) != 0 ) {} // 上キーチェック if ( ( key & 0x00002000 ) != 0 ) {} // 左キーチェック if ( ( key & 0x00004000 ) != 0 ) {} // 右キーチェック if ( ( key & 0x00008000 ) != 0 ) {} // 下キーチェック } と,このようになります。 ifの中身に該当するキーを押していた場合に実行したい処理をいれてください。 上キーなら「0x00001000」と&を取ってビットが立っているか調べています。 16進数の一覧は上記の一覧表をご覧になってください。 もう一度言いますがこの命令はその時のキー状態を取得します。 続けて説明するMIDP用のキー取得命令では別スレッドで動いているので すぐ処理が行くとは限りません。 ですから反応速度を要求するゲームでは先ほどの命令は非常に便利です。 ただ処理が重いゲームになるとデバイスコントロールでの取得は取りこぼしが出てきます.. (その時のキー状態を取得のため,処理が重いとキーを押したときにその処理を通らない可能性がある) ソース
MIDPでのキー入力
はい,続いてMIDPでのキー入力です。 protected void keyPressed(int kcode){}//キー押した時 protected void keyReleased(int kcode){}//キー離した時 protected void keyRepeated(int kcode){}//キーずっと押した時 この3つのそれぞれの状態で受けれます。 引数で渡しているkcodeには押されたキー情報が来ます。 このままでは取れないキーがあるのでキーの値を変換しています。 int action=getGameAction(kcode); 後はキーコードが定数であるのでそれとif判定をします。 (この関数は同時押しは来ずに押した順番にキーコードが来ます。) 代表的な定数として,UP,DOWN,LFT,RIGHT,FIREなどがあります。 これは上下左右・決定キーです。 ソース