03 キー入力で移動する
Componentを入れ替える
02の自動移動をやめ、既存のMoveWithKeyを使います。LessonBoxのLessonDriftのimport・追加を除き、次のimportを追加します。
cpp
import Component.MoveWithKey;
import MyLib.KeyStatus;LessonBoxのInit()を置き換え、Update()を追加します。
cpp
void Init() override {
m_pos = { 300.0f, 300.0f };
auto move = m_compMgr->AddComponent<component::MoveWithKey>(this);
move->SetHorizontal(keyType.LEFT, keyType.RIGHT, 180.0f);
}
void Update() override {
m_pos += m_velocity;
}MoveWithKeyは速度設定にdeltaTimeを掛け、AccessVel()へそのフレームの移動量を入れます。この例ではさらにdeltaTimeを掛けません。コライダーを持たないLessonBoxなので、Update()で座標へ反映しています。
Playerのようにコライダーが移動を担う場合、この座標加算を重ねないでください。更新順序
キーの状態を読む
次はUpdate内でSpaceを押した瞬間だけ処理する書き方です。
cpp
if (input::KeyStatus::CheckKey(keyType.SPACE, ON_PRESS)) {
// 1回だけ実行したい処理
}押し続ける場合はON_PRESS | PRESSINGです。入力更新はSceneManagerが行うので、各オブジェクトから再更新しません。
確認する
左・右・左右同時・キーを離す、の4通りを試します。左右同時では移動が相殺されます。この例は水平移動のみです。SetVerticalには速度参照の問題があるため、縦移動の完成例として扱いません。