キーボード、マウス、コントローラーなどの入力機器を使いたい場合は、
そのソースの冒頭でInput.hをインクルードする。
#include "Engine/Input.h"
「方向キーが押されている間は移動する」のような使い方をしたい場合は、方向キーが押されているのか、押されていないのかを知る必要がある。
その場合はInput::IsKey関数を使う。
引数には調べたいキーのコードを指定する。
押されていればtrue、押されてなければfalseが返る。
例えば、スペースキーが押されているか知りたい場合は
//スペースキーが押されていたら
if(Input::IsKey(DIK_SPACE))
{
//何らかの処理
}
このように書けばよい。
キーコードはDIK_○○○という形で決められている。
一覧はこちら。
決定キーのような処理を上のInput::IsKey関数で作ると、一瞬(1/60秒以内)でキーから手を放さないと連打した扱いになってしまう。
このような場合はInput::IsKeyDown関数を使う。
使い方はInput::IsKey関数と同じ。
//エンターが押されたら
if(Input::IsKeyDown(DIK_RETURN))
{
//何らかの処理
}
溜め攻撃等の処理を作りたい場合は、キーを話した瞬間を取得する必要がある。
このような場合はInput::IsKeyUp関数を使う。
使い方はInput::IsKey関数、Input::IsKeyDown関数と同じ。
//Aキーを放した
if(Input::IsKeyUp(DIK_A))
{
//何らかの処理
}
マウスのボタンがが押されているのか、押されていないのかを知りたい場合はInput::IsMouseButton関数を使う。
引数には調べたいボタンの番号(0:左ボタン/1:右ボタン/2:中央ボタン)を指定する。
押されていればtrue、押されてなければfalseが返る。
例えば、左クリックされてるか知りたい場合は
//マウスの左ボタンが押されていたら
if(Input::IsMouseButton(0))
{
//何らかの処理
}
このように書けばよい。
今押した瞬間かどうか知りたい場合はInput::IsMouseButtonDown関数を使う。
使い方はInput::IsMouseButton関数と同じ。
//左クリックされた
if(Input::IsMouseButtonDown(0))
{
//何らかの処理
}
ボタンを放した瞬間か知りたい場合はInput::IsMouseButtonUp関数を使う。
使い方はInput::IsMouseButton関数、Input::IsMouseButtonDown関数と同じ。
//マウスの左ボタンを放した
if(Input::IsMouseButtonUp(0))
{
//何らかの処理
}
現在のマウスカーソルの位置はInput::GetMousePosition関数で取得できる。
//マウスカーソルの位置
XMFLOAT3 mouse;
mouse = Input::GetMousePosition();
Z座標は常に0。
なお、ここで取得できる情報はスクリーン座標(ディスプレイの左上が(0,0))なので注意。
各ボタンについて、押してるかどうかはIsPadButton関数、押した瞬間かどうかはIsPadButtonDown関数、放した瞬間かどうかはIsPadButtonUp関数で取得できる。
//コントローラーのAボタンを押した
if(Input::IsPadButton(XINPUT_GAMEPAD_A))
{
//何らかの処理
}
引数はボタンコード。(下図参照)
左スティックの傾きはGetPadStickL関数、右スティックの傾きはGetPadStickRで取得できる。
どちらもD3DXVECTOR3型を返し、xとyに-1~1の範囲で傾きが入っている。
//左スティックでオブジェクトを動かす
_position += Input::GetPadStickL();
左トリガーの押し込み具合はGetPadTrrigerL関数、右トリガーの押し込み具合はGetPadTrrigerRで取得できる。
どちらも0~1の範囲のfloat型を返す
//左トリガーの押し具合
float t = Input::GetPadTrrigerL();
このエンジンは同時に4つまでコントローラーを使える設計になっている。
上で説明したコントローラー用各関数は、引数の最後にコントローラーの番号を指定できる。
番号はPCに繋いだ順に0,1,2,3という番号になり、省略した場合は0を指定したことになる
//1コンのAボタンを押した
if(Input::IsPadButton(XINPUT_GAMEPAD_A, 0))
{
//何らかの処理
}
//2コンのAボタンを押した
if(Input::IsPadButton(XINPUT_GAMEPAD_A, 1))
{
//何らかの処理
}