**libnds のキー入力関数 (ARM9) [#bb1adb7c]
I'd veutrne that this article has saved me more time than any other.

libnds には KEYS レジスタのラッパー関数が入ってます。
ARM9 からは Xボタンと Yボタンが見えませんが、便利な機能が追加されています。

***scanKeys() [#z2f31bba]
この関数を毎フレーム呼び出すことで、キー状態キャッシュを更新します。

***keysHeld() [#sb085cec]
scanKeys関数が最後に呼び出された時に押されていたキーを返します。

***keysDown() [#ucffc888]
scanKeysが2回呼び出される間、最初は押されていなくて、次のscanKeys呼び出しの時に押されていたキーの情報を返します。
ユーザが最初に押したボタンのみを取得することができます。

***keysUp() [#y019f9e7]
scanKeysが2回呼び出される間、最初は押されいて、次のscanKeys呼び出しの時に押されていないキーの情報を返します。

***Key 定数 [#sff08a3c]

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) [#ka3d1276]

|レジスタ|アドレス:幅|アクセス|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|h
|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) [#u14eeddd]

|ビット番号|アクセス|説明|h
|8 〜 15||他の用途で使う|
|7|読み込み専用|ヒンジセンサ|
|6|読み込み専用|ペン押下|
|1|読み込み専用|Y|
|0|読み込み専用|X|

Xボタン、Yボタンは他のボタンと同じように機能します。(通常 1、押されている状態から離された状態になった時 0 )
ペン押下ビットは、タッチされている間 0 になります。

ヒンジセンサは、磁石を検出して動作します。
A・B・X・Yボタンの上辺りにあります。
フタが閉じられる時に、スピーカの磁石を検出します。(スピーカに限らず、磁石ならなんでも動作するようです)
このセンサは、フタが開けられた時に割り込みを発生させます。


----


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS