
アクションゲームでは当然ながらキャラクターを操作することができなければいけません。左右の移動やジャンプ、敵への攻撃などの動きが必要になってきます。
そこで、この記事ではScratchで作るアクションゲームに必要なテクニックを紹介しています。
今回は、キャラクターがジャンプしながら横移動するプログラミングについて紹介します。
この記事を読んでいただくと、アクションゲームでキャラクターがジャンプしながら左右にも移動させるプログラミングの方法が分かります。
なお、この記事で使用しているスプライト(キャラクター・背景・オブジェクト・音声など)はすべてパブリックドメインの無料の素材をダウンロードして使用しています。
アクションゲームとは、コンピューターゲームのジャンルの1つで、キャラクターをボタンやレバーなどで操作してステージを次々にクリアしたり、勝敗や得点を競うタイプのゲームのこと。反射神経と瞬間的な判断力を競うゲーム。
完成品
この章の内容をご自身のScratch環境に反映すれば、同じ動きを再現することができます。
完成した動き
ジャンプと着地(地面でピタッと止める)のプログラミングテクニックについては、前回の記事で紹介しているのでそちらを参照ください。↓↓↓
【Scratch 3.0】アクションゲーム ジャンプと地面にめり込まないように着地する方法(Tips)
上矢印キーでジャンプします。上矢印キーを押しながら右矢印キーまたは左矢印キーを押すと、ジャンプ中であっても左右に移動します。
止まっている間、ジャンプ中、下降中、左右移動中はいずれもキャラクターのコスチュームを使ってアニメーションで表現しています。

使用したスプライト
スプライトは「キャラ1」「地面1」「背景1」「天気1」の4つです。

使用したスプライトの説明は、前回の記事と完全に重複しますので前回の記事の「使用したスプライト」の章をご確認ください。↓↓↓
アクションゲーム用の背景・キャラクター・アイテム等の画像や音声は、パブリックドメインである「スーパーパワーアセットパック(CC0)のprehistoric-platformer」を使っています。
完成したスクリプト
完成したスクリプトの全体です。
「キャラ1」以外の「地面1」「背景1」「天気1」のスクリプトは、前回記事の内容と同一です。
【キャラ1のスクリプト】
前回の記事の「キャラ1」のスクリプトにブロックを追加(下図赤枠)しています。(前回記事で説明済みの内容は割愛する場合があります)
「横移動」定義ブロックに左右移動するスクリプトをまとめて定義しています。この定義ブロックを配置した2か所が重要です。1か所はジャンプ中の横移動、もう1か所は地面に触れている間の横移動になっています。
「ジャンプ」定義ブロック、「落ちる」定義ブロックにはそれぞれ名称に合った動作アニメーションをまとめています。
「アニメーション」メッセージ部分は、キャラクターのアニメーションに特化している部品なので、無くてもジャンプ中の横移動は可能です。
- ジャンプ力:このスプライトのみ
- 地面に触れた:このスプライトのみ
- コスチューム保存用:このスプライトのみ




【地面1のスクリプト】
「地面1」スプライトに読み込んだ画像ファイルは、大きさを480×360pxになるように作ったので大きさは100%(デフォルト)でぴったりです。高さ(Y座標)は好み次第ですが、今回は-30にしています。

【背景1のスクリプト】
「背景1」スプライトに読み込んだ画像ファイルは、大きさを120%にするとステージにぴったり収まる大きさになります。高さ(Y座標)は好み次第ですが、今回は-50にしています。

【天気1のスクリプト】
「天気1」スプライトに読み込んだ画像ファイルは、大きさを120%にするとステージにぴったり収まる大きさになります。座標は真ん中(0, 0)の位置に設定します。

スクリプトの作り方
ここからはプログラムを作っていく中でポイントとなる部分を説明します。
ポイント①:ジャンプしていない時の横移動をつくる
まず「横移動」定義ブロックをつくります、が中身は単純です。
「右矢印キーが押されたら」90度に向けて3歩動かす、「左矢印キーが押されたら」-90度に向けて3歩動かすだけです。

つぎに、この定義ブロックを配置します。
ジャンプしていない時に横移動させるわけですが、ジャンプしていない時とは「地面に触れた」変数の値が1のとき、つまり地面に触れている(=着地している)ときとなります。
上矢印キーを押すとジャンプする仕様になっているのでその処理が終わったあと、それは下の図で赤枠で囲った箇所になります。
この位置に「横移動」定義ブロックを配置すれば、地面に着地している間の横移動ができるようになります。

ポイント②:ジャンプ中の横移動をつくる
つぎに、ジャンプ中の横移動について考えます。
ジャンプ中とはつまり、「上矢印キーが押された」状態で「地面に触れた」変数の値が0のときになります。
上矢印キーを押すとジャンプする仕様になっているのですが、そのすぐ後に「(地面に触れた=1)まで繰り返す」ブロックがあります。
このブロックの中でY座標を変化させているので、実際にキャラクターが動いている(つまりジャンプ中という)のはこの「~まで繰り返す」ブロックの中ということになります。
この位置に「横移動」定義ブロックを配置すれば、ジャンプ中に横移動ができるようになります。

ここまでのポイントを押さえれば、アクションゲームでキャラクターがジャンプしながら左右にも移動させるスクリプトを完成させることができると思います。
失敗しやすいポイント
気を付けた方がよいポイントについて説明します。
横移動のスクリプトを配置する場所が足りていない場合
すでに説明しましたが、「横移動」のスクリプトは下の図のようにジャンプ中とジャンプしていない間の2か所に配置する必要がありました。
このことを忘れてしまい、どちらか一方だけに配置した場合は「ジャンプ中は横移動できるけどジャンプしていない時は横移動できない」か「ジャンプしていない時は横移動できるがジャンプ中に横移動できない」ことになってしまいますので注意してください。

以前、同じように「ジャンプ中に横移動する」内容で超基本的なテクニックを説明した記事もありますので合わせてご覧ください。↓↓↓
応用編
今回は特に応用編はありません。
まとめ
さいごに、今回の記事で説明した『アクションゲームでキャラクターがジャンプしながら左右にも移動させるプログラミング』のポイントをまとめます。
- ポイント①:ジャンプしていない時の横移動をつくる
- ポイント②:ジャンプ中の横移動をつくる
キャラクターのジャンプ中の横移動はちょっとハマりやすいミスが隠れていると思います。ただし、今回説明したポイントさえ押さえれば、今後はミスなく安定したゲームプログラミングができると思いますのでしっかり覚えておきましょう。
どうでしたか?上手く再現できたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)