【GDevelop 基礎 05】キーを押すと移動する

今回作成するもの

矢印キー (上下左右) を入力することで、キャラクターが上下左右に移動します。左右の移動時には、スプライト画像の左右反転も行っています。

OnKeyPress_Move Extension を作成

以下のように OnKeyPress_Move の Behavior を追加します。doStepPreEvents を追加します。

パラメータの追加

Speed はいつもどおりの動く速度です。それ以外は以下に説明します。

vx 現在の X 軸方向の入力値です。Speed の値が方向によって正負で入力されます。
vy 現在の Y 軸方向の入力値です。Speed の値が方向によって正負で入力されます。
IsFacingLeft 現在左を向いているかのフラグです。スプライトの反転のために利用します。

【GDevelop 基礎 04】 一定間隔で反転する - Make Everything Games では flipFlag をスプライトの反転のために用意していましたが、それと同じと考えてください。

doStepPreEvents の実装

コメントも入れていますがステップごとに説明します。

毎フレームの値の初期化

ここでは vx, vy の値を初期化しています。これらの値は最後の「スプライトの移動」で利用される値になりますが、キー入力イベントでその値が変化します。

ただ、毎フレーム 0 にしないと、一度「右」を押されると、ずっと右に進み続けてしまうのでこのようにしています。もちろん、キーのリリース(キーを離す)イベントで 0 に戻す方法も考えられます。

キー入力イベント

上下左右のキー入力に応じて vx, vy それに加えて、左右では IsFacingLeft の値も変更しています。

注意点があるとすると、vy は Y 方向ですが、GDevelop は Y は下方向が正方向になるため、 Up (上) を押された時に -Speed を入れています。

IsFacingLeft に関しては、左右の方向に対応しているので特に違和感は無いと思います。また、この値は毎フレーム初期化する必要がありません。一度左を押したら、次に右を押すまでは左を向いていて欲しいからです。

スプライト画像の反転

ここに関しては 【GDevelop 基礎 04】 一定間隔で反転する - Make Everything Games で説明したので特に解説は不要かと思いますが、Flip horizontally でスプライトの反転をしています。初期値が「右」を向いているので、 IsFacingLefttrue の時に反転させて「左」にします。

スプライトの移動

ここは 【GDevelop 基礎 04】 一定間隔で反転する - Make Everything Games の Appendix で触れた Add to force (angle) と同じ種類の Add to force を利用しています。

Add to force (angle) は角度に対しての force でしたが、こちらは単純に X, Y に対して速度を指定できます。

スプライトの Behavior に設定する

パラメータには vx, vy, IsFacingLeft もありましたが、Editor で表示するようにしなかったので調整できる値は Speed のみになっています。

動作確認

冒頭に貼った画像のように上下左右に移動できます。斜めにも移動することができます。