public static int KEY_UP = 1;// public static int KEY_DOWN = 1<<1;// public static int KEY_LEFT = 1<<2;// public static int KEY_RIGHT = 1<<3;// public static int KEY_SHOT = 1<<4;// public static int KEY_JAMP = 1<<5;// private static int KEY_CODE_UP = 0x00;// カーソルキー上のキーコードを代入する。 private static int KEY_CODE_DOWN = 0x00;// 下 private static int KEY_CODE_LEFT = 0x00;// 左 private static int KEY_CODE_RIGHT = 0x00;// 右 private static int KEY_CODE_SHOT = 0x00;// zキーあたり? private static int KEY_CODE_JAMP = 0x00;// xキーあたり? private int[] KEY_CODE_TABLE = { KEY_CODE_UP, KEY_CODE_DOWN, KEY_CODE_LEFT, KEY_CODE_RIGHT, KEY_CODE_SHOT, KEY_CODE_JAMP, }; private int m_keyState = 0; // 現フレームのキー入力状態を保持する。 private int m_oldKeyState = 0; // 前フレームのキー入力状態を保持する。 //ワンショット。押しっぱなしではなく、マウスのクリックのような操作時のキー入力状態を保持する。 private int m_oneShotKeyState = 0; public void checkKeyState() { // 前フレームの入力を記憶しておく。 m_oldKeyState = m_keyState; m_keyState = 0; for (int i = 0; i < KEY_CODE_TABLE.length; i++) { // getKeybordState(int keyCode) は各処理系に準備されたAPIだと見なしてください。 // 仕様としては、引数で渡したキーコードに該当するキーが押下されていたらtrueを返します。 if (getKeybordState(KEY_CODE_TABLE[i])) { // キー状態のビットマップを組み立てます。 // 上キーが押されていた場合は 0000 0000 0000 0001 // SHOTキーが押されていた場合は 0000 0000 0001 0000 // 左キーとJAMPが押されている場合は 0000 0000 0010 0100 // といった具合に、キーに該当するビットが立ちます。 m_keyState |= 1 << i; } } // XORでワンショットかどうかが求まる。 m_oneShotKeyState = m_oldKeyState^m_keyState; } // キーが押下されている? public boolean press(int key) { return (m_keyState & key) == key; } // キーが開放されている? public boolean release(int key) { return (m_keyState & key) != key; } // ワンショット押下(マウスのクリックで言う所の、ボタンを押し下げた瞬間だけを検出) public boolean oneShotPress(int key) { return (m_oneShotKeyState & key) == key & press(key); } // ワンショット開放(マウスのクリックで言う所の、ボタンを離した瞬間だけを検出) public boolean oneShotRelease(int key) { return (m_oneShotKeyState & key) == key & release(key); } /** 使い方 */ void main() { checkKeyState(); if (press(KEY_UP)) { // 上キーの処理 } if (oneShotPress(KEY_SHOT)) { // ショット! } else if (press(KEY_SHOT)){ // ショットを押しっぱなしの時はパワーをチャージ } else if (oneShotRelease(KEY_SHOT)) { // チャージが溜まっていたらハイパーショットを撃ったり打たなかったり。 } // あまり使わなそうだけど、同時押しも検出できる。 if (press(KEY_SHOT | KEY_JAMP)) { // ジャンプショット! } }