libnds のキー入力関数 (ARM9)

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

scanKeys()

この関数を毎フレーム呼び出すことで、キー状態キャッシュを更新します。

keysHeld()

scanKeys関数が最後に呼び出された時に押されていたキーを返します。

keysDown()

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

keysUp()

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

Key 定数

key〜〜関数を呼び出すと、キー情報を返しますが、次の定数とビットマスクを取って使用します。

KEYS レジスタ (ARM7, ARM9)

RegisterAddress:WidthAccess1514131211109876543210
KEYS0x04000130:16R000000LRdownupleftrightstartselectBA
KEYS_CR0x04000132:16R/WModeIRQ0000LRdownupleftrightstartselectBA

それぞれのキーは通常1を返します。 押されて、離された時に0を返します。 15〜10ビットは、常に0です。(保障されてません) これらのビットはビットマスクを取って、消すようにしてください。

コード例:

uint16 keysPressed = (~KEYS) & 0x3FF;

keysPressed の中で、 0 でないビットがどこにあったかで、押されたキーを表します。

割り込みはIRQ ビットがセットされている場合かつ、KEYS_CR レジスタの Mode でセットされた値とキーがマッチする場合に起こります。

Mode ビット:

XKEYS (0x04000136:16) (ARM7 only)

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

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

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



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