久しぶりの開発メモです。
ゲームボーイの開発環境の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");
}
}
}

