キー入力


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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 もご覧ください。