キー入力

「キー入力」の編集履歴(バックアップ)一覧はこちら

キー入力」(2007/06/27 (水) 23:32:07) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

**libnds のキー入力関数 (ARM9) libnds には KEYS レジスタのラッパー関数が入ってます。 ARM9 からは Xボタンと Yボタンが見えませんが、便利な機能が追加されています。 ***scanKeys() この関数を毎フレーム呼び出すことで、キー状態キャッシュを更新します。 ***keysHeld() scanKeys関数が最後に呼び出された時に押されていたキーを返します。 ***keysDown() scanKeysが2回呼び出される間、最初は押されていなくて、次のscanKeys呼び出しの時に押されていたキーの情報を返します。 ユーザが最初に押したボタンのみを取得することができます。 ***keysUp() scanKeysが2回呼び出される間、最初は押されいて、次のscanKeys呼び出しの時に押されていないキーの情報を返します。 ***Key 定数 key~~関数を呼び出すと、キー情報を返しますが、次の定数とビットマスクを取って使用します。 -KEY_A -KEY_B -KEY_SELECT -KEY_START -KEY_RIGHT -KEY_LEFT -KEY_UP -KEY_DOWN -KEY_R -KEY_L -KEY_X -KEY_Y -KEY_TOUCH (タッチスクリーンが押されているかどうか) -KEY_LID (磁気センサ付きのモニタのヒンジ) **KEYS レジスタ (ARM7, ARM9) |Register|Address:Width|Access|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0| |KEYS|0x04000130:16|R|0|0|0|0|0|0|L|R|down|up|left|right|start|select|B|A| |KEYS_CR|0x04000132:16|R/W|Mode|IRQ|0|0|0|0|L|R|down|up|left|right|start|select|B|A| それぞれのキーは通常1を返します。 押されて、離された時に0を返します。 15~10ビットは、常に0です。(保障されてません) これらのビットはビットマスクを取って、消すようにしてください。 コード例: uint16 keysPressed = (~KEYS) & 0x3FF; keysPressed の中で、 0 でないビットがどこにあったかで、押されたキーを表します。 割り込みはIRQ ビットがセットされている場合かつ、KEYS_CR レジスタの Mode でセットされた値とキーがマッチする場合に起こります。 Mode ビット: -0: An interrupt is generated if any key specified is pressed (or) -1: An interrupt is generated only if all keys speciifed are pressed (and) **XKEYS (0x04000136:16) (ARM7 only) 15..8 Other purposes, dunno yet 7 R Hinge 6 R Pen down 1 R Y 0 R X X and Y behave the same as other buttons (normally high, pulled low when pressed). The pen down bit will be cleared if the touch pad is being touched. The hinge sensor is a small hall effect sensor (or other magnetic sensing device) above the ABXY cluster of buttons, which detects the speaker magnet as the case is closed. This sensor has the ability to generate an interrupt when opened (see Interrupts). ----
**libnds のキー入力関数 (ARM9) libnds には KEYS レジスタのラッパー関数が入ってます。 ARM9 からは Xボタンと Yボタンが見えませんが、便利な機能が追加されています。 ***scanKeys() この関数を毎フレーム呼び出すことで、キー状態キャッシュを更新します。 ***keysHeld() scanKeys関数が最後に呼び出された時に押されていたキーを返します。 ***keysDown() scanKeysが2回呼び出される間、最初は押されていなくて、次のscanKeys呼び出しの時に押されていたキーの情報を返します。 ユーザが最初に押したボタンのみを取得することができます。 ***keysUp() scanKeysが2回呼び出される間、最初は押されいて、次のscanKeys呼び出しの時に押されていないキーの情報を返します。 ***Key 定数 key~~関数を呼び出すと、キー情報を返しますが、次の定数とビットマスクを取って使用します。 -KEY_A -KEY_B -KEY_SELECT -KEY_START -KEY_RIGHT -KEY_LEFT -KEY_UP -KEY_DOWN -KEY_R -KEY_L -KEY_X -KEY_Y -KEY_TOUCH (タッチスクリーンが押されているかどうか) -KEY_LID (磁気センサ付きのモニタのヒンジ) **KEYS レジスタ (ARM7, ARM9) |Register|Address:Width|Access|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0| |KEYS|0x04000130:16|R|0|0|0|0|0|0|L|R|down|up|left|right|start|select|B|A| |KEYS_CR|0x04000132:16|R/W|Mode|IRQ|0|0|0|0|L|R|down|up|left|right|start|select|B|A| それぞれのキーは通常1を返します。 押されて、離された時に0を返します。 15~10ビットは、常に0です。(保障されてません) これらのビットはビットマスクを取って、消すようにしてください。 コード例: uint16 keysPressed = (~KEYS) & 0x3FF; keysPressed の中で、 0 でないビットがどこにあったかで、押されたキーを表します。 割り込みはIRQ ビットがセットされている場合かつ、KEYS_CR レジスタの Mode でセットされた値とキーがマッチする場合に起こります。 Mode ビット: -0: 指定されたキーのどれかが押されている場合、割り込み発生 (OR) -1: 指定されたキーの全てが押されている場合、割り込み発生 (AND) **XKEYS (0x04000136:16) (ARM7 only) |15..8|他の用途で使う|| |7|R|ヒンジ| |6|R|ペン押下| |1|R|Y| |0|R|X| Xボタン、Yボタンは他のボタンと同じように機能します。(通常 1、押されている状態から離された状態になった時 0 ) ペン押下ビットは、タッチされている間 0 になります。 ヒンジセンサは、磁石を検出して動作します。 A・B・X・Yボタンの上辺りにあります。 フタが閉じられる時に、スピーカの磁石を検出します。(スピーカに限らず、磁石ならなんでも動作するようです) このセンサは、フタが開けられた時に割り込みを発生させます。 ----

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。