入力装置
ゲームを作るには基本的に何らかの入力装置を使ってユーザーの行動を反映させる必要があります。
入力装置とは下記のようなものです。
・キーボード
・ゲーム機等のコントローラー
・スマートフォン等のタッチパネル
・音声認識の装置
・画像認識の装置
他にも色々とあるかと思いますが、簡単にはこんな感じになります。
そんな中で個人でゲームを作る際に簡単で身近なのがキーボードになるかと思います。
今回はキーボードを使った入力システムの実装について紹介していきます。
Windowsでキーボードの入力判定
Windows環境ではGetKeyboardStateの関数で簡単にキーボードの入力状態が取得できます。
この記事ではこれを使って入力判定を実装していきます。
先ずはGetKeyboardStateの使い方です。
// キーステートの保持用
BYTE keyboardState[256];
// キーステートの更新
void UpdateKeyState()
{
// キーボードの状態取得
GetKeyboardState(keyboardState);
}
// 指定されたキーが押されているか?
bool IsKeyPress(int keycode)
{
// 入力判定
if( keyboardState[keycode] & 0x80 )
{
return true;
}
return false;
}
GetKeyboardStateは256個のキーの入力状態を取得できます。
取得した際に入力されているキーは最上位ビットが立ちます。
これだけで入力されているかの判定は出来てしまいます。
作ろうと思えば上記の入力処理でゲームを作くることも可能です。
ただゲームを作る際には他にもあると便利な機能がいくつかあります。
- キーが入力された瞬間の取得
- キーが離された瞬間の取得
- キーバインド機能
これぐらいがあれば最低限はゲームを作っていけるかと思います。
ではこの3つも含めて満たせるシステムを実際に作りながら見ていきましょう。
キー入力システムの実装
キー入力は闇雲に使用するキーを増やすと管理がややこしくなります。
それにユーザーにも不親切な作りになってしまいます。
ただ入力キーが固定だと、後で入力するキー配置を変えたい場合やキーコンフィグ機能等のオプション機能の実装が難しくなります。
なので先ずはキーバインドをする機能を想定した準備をします。
enum EKeyBind
{
Option, // Option
A, // A
B, // B
Up, // ↑
Down, // ↓
Left, // ←
Right, // →
KeyBindMax,
};
ゲーム内でキー入力を取得するときはこのEKeyBindの値を使っていきます。
今回は単純な入力のみですが、必要な入力するに合わせて拡張してください。
次に入力システムの必要な処理を定義していきます。
// 入力システムの初期化 void InitializeInput(void); // 入力システムの解放 void FinalizeInput(void); // 入力状況の更新 void UpdateInput(void); // キーバインドの設定 void BindKey(EKeyBind key, int keyCode);
初期化と解放、更新、そしてキーバインド用の関数を準備します。
次のページでは実装を見ていきましょう。