久しぶりの開発メモです。
ゲームボーイの開発環境のGBDKについて、キー入力のメモです。
開発環境について
過去のエントリーを参照してください
blog-e.uosoft.net
取得方法
キー入力はGBDKのファンクションの joypad() で取得できます。
gb.h をインクルードしてください。
joypad() のキーは8ビットの値で、押されているキーのビットが1で返されます。
ビットのマスクは gb/gb.h (includeフォルダ直下のgb.hを読めばこちらのファイルも読まれる)で定義してあります。
joypad()で取得した値と取得したいキーのマスク値をANDして、0でなければ押されている状態となります。
UINT8 key; key = joypad(); if (key & J_A) { // Aボタンが押されている場合 } else { // Aボタンが押されていない場合 }
各ボタンのマスク値
定義 | マスク(16進数) | マスク(2進数) |
---|---|---|
J_START | 0x80 | 10000000 |
J_SELECT | 0x40 | 01000000 |
J_B | 0x20 | 00100000 |
J_A | 0x10 | 00010000 |
J_DOWN | 0x08 | 00001000 |
J_UP | 0x04 | 00000100 |
J_LEFT | 0x02 | 00000010 |
J_RIGHT | 0x01 | 00000001 |
サンプルソース
押されているキーを表示します。
#include <stdio.h> #include <gb.h> void main() { UINT8 key; while(1) { key = joypad(); if (key & J_START) { gotoxy(1, 1); printf("START\n"); } else { gotoxy(1, 1); printf(" \n"); } if (key & J_SELECT) { gotoxy(1, 2); printf("SELECT\n"); } else { gotoxy(1, 2); printf(" \n"); } if (key & J_B) { gotoxy(1, 3); printf("B\n"); } else { gotoxy(1, 3); printf(" \n"); } if (key & J_A) { gotoxy(1, 4); printf("A\n"); } else { gotoxy(1, 4); printf(" \n"); } if (key & J_DOWN) { gotoxy(1, 5); printf("DOWN\n"); } else { gotoxy(1, 5); printf(" \n"); } if (key & J_UP) { gotoxy(1, 6); printf("UP\n"); } else { gotoxy(1, 6); printf(" \n"); } if (key & J_LEFT) { gotoxy(1, 7); printf("LEFT\n"); } else { gotoxy(1, 7); printf(" \n"); } if (key & J_RIGHT) { gotoxy(1, 8); printf("RIGHT\n"); } else { gotoxy(1, 8); printf(" \n"); } } }