【作り方解説】Scratch(スクラッチ)で壁ジャンプ機能付きプラットフォームゲームを作ろう!その2

Scratch(スクラッチ)で壁ジャンプ機能付きプラットフォームゲームを作ろう!その2です。
その2では、縦方向のコードについて解説しています。重力の効果や壁ジャンプについても解説しています。横方向の詳しいコード説明については、プラットフォームゲームを作ろう!その1をご覧ください。

Scratch(スクラッチ):プラットフォームゲームの作り方(横方向のコード)

動画説明その2で作ったScratchプロジェクト

ゲームのやり方

・横移動:左右の矢印キー
・ジャンプ:上矢印キー
・壁ジャンプ:上矢印キー

 

※説明動画で使用する「プラットフォームゲームを作ろう!その1」は、https://scratch.mit.edu/projects/844330057/を利用してください。

【完成版】壁ジャンプ付き:プラットフォームゲーム

ゲームのやり方

【操作方法】
左右矢印キーで横移動
上矢印キーでジャンプ

 

本作品のScratchプロジェクトは、https://scratch.mit.edu/projects/843989729です。

プラットフォームゲーム:Playerのスクリプト

初期設定とメインのスクリプト
  1. 変数「横戻り値」、「横スピード」、「縦戻り値」、「縦スピード」の値を0にする。
  2. ずっと繰り返し、カスタムブロック(関数)「横操作」「横移動」「重力」「ジャンプ」を実行する。

横操作のスクリプト
  1. もしも、右向き矢印キーが押されたら、変数「横スピード」の値を「4」にする。
  2. もしも、左向き矢印キーが押されたら、変数「横スピード」の値を「-4」にする。
  3. 変数「横スピード」の値を、「横スピード」に0.95をかけた値にする。
    ※この処理により、変数「横スピード」の値は0.95をかけ続けることになり、右向き矢印キー、もしくは左向き矢印キーが押されなければ、変数「横スピード」の値は徐々に0に近づいていく。

横移動のスクリプト
  1. X座標を変数「横スピード」の値ずつ変える。
    ※カスタムブロック「横操作」により変更される変数「横スピード」の値により、プレイヤーのX座標は変化する。つまり、左右の矢印キーによりプレイヤーを左右に動かすことができる。
  2. もしも、プラットフォームに触れたなら処理3-6を実行する。
  3. カスタムブロック「壁ジャンプ」を実行する。
  4. もしも、変数「横スピード」の値が0以上であれば変数「横戻り値」を-1に、変数「横スピード」の値が0以下であれば変数「横戻り値」を1にする。
    ※変数「横スピード」の値が0以上とは、右方向に移動している時を意味する。つまり、プレイヤーが右に動いているときは変数「横戻り値」を-1に、プレイヤーが左に動いているときは変数「横戻り値」を1にする。
  5. プラットフォームに触れなくなるまで、X座標を変数「横戻り値」ずつ変える。
    ※プレイヤーは処理1により左右に移動してプラットフォームにぶつかると、プラットフォームに触れなくなるまで変数「横戻り値」ずつX座標の値を変更する。つまり、プレイヤーが右方向に移動してプラットフォームにぶつかったら、処理4により変数「横戻り値」の値は-1となり、プレイヤーのX座標は-1ずつプラットフォームに触れなくなるまで変わるので、プレイヤーは左方向に戻るようになる。
  6. 変数「横スピード」の値を0にする。
    ※変数「横スピード」の値が0になると、プレイヤーは左右に動かなくなる。

 

注意)「横移動」のカスタムブロックは、「画面を再描画せずに実行する」にチェックを入れてください。チェックを入れると、プラットフォームにぶつかって(プラットフォームに食い込んでから)、食い込みから戻る処理が見えなくなります。

カスタムブロックの画面を再描画せずに実行するとは?

カスタムブロックを作る際に、「画面を再描画せずに実行する」にチェックを入れると、カスタムブロック内のすべてのプログラミングブロックが完了するまで、画面上の変更が表示されないままとなります。

そのため、プレイヤーがプラットフォームにぶつかり、プレイヤーに触れなくなるまで変数「戻り値」ずつ戻る処理が見えなくなります。一方、「画面を再描画せずに実行する」にチェックが入っていないときは、カスタムブロック内のプログラミングブロックを実行する度に画面が再描画されるので、目で見て分かる程度のスピードでプレイヤーがプラットフォームにぶつかって元に戻るようになります。

重力のスクリプト
  1. Y座標を変数「縦スピード」の値ずつ変える。
    ※本カスタムブロックの処理6より、変数「縦スピード」の値が-1ずつ小さくなるので、プレイヤーの下方向への移動(落下スピード)は徐々に早くなる(加速する)。
  2. もしも、プラットフォームに触れたなら処理3-6を実行する。
  3. もしも、変数「縦スピード」の値が0以上であれば変数「縦戻り値」を-1に、変数「縦スピード」の値が0以下であれば変数「縦戻り値」を1にする。
    ※変数「縦スピード」の値が0以上とは上方向に、そうでないとき(0以下のとき)は下方向に移動している時を意味する。つまり、プレイヤーが上に動いているときは変数「縦戻り値」を-1に、プレイヤーが下に動いているときは変数「縦戻り値」を1にする。
  4. プラットフォームに触れなくなるまで、Y座標を変数「縦戻り値」ずつ変える。
    ※プレイヤーは処理1により上下に移動してプラットフォームにぶつかると、プラットフォームに触れなくなるまで変数「縦戻り値」ずつY座標の値を変更する。つまり、プレイヤーが下方向に落下してプラットフォームにぶつかったら、処理3により変数「縦戻り値」の値は1となり、プレイヤーのY座標は1ずつプラットフォームに触れなくなるまで変わるので、プレイヤーは上方向に戻るようになる。
  5. 変数「縦スピード」の値を0にする。
    ※変数「縦スピード」の値が0になると、プレイヤーは上下に動かなくなる。
  6. 変数「縦スピード」の値を-1ずつ変える。
    ※変数「縦スピード」の値は-1, -2, -3, -4…となり、処理1によりプレイヤーのY座標は変数「縦スピード」ずつ変わるので、プレイヤーの落下スピードは徐々に早くなる(加速する)。

 

注意)「重力」のカスタムブロックは、「画面を再描画せずに実行する」にチェックを入れてください。チェックを入れると、プラットフォームにぶつかって(プラットフォームに食い込んでから)、食い込みから戻る処理が見えなくなります。

ジャンプのスクリプト
  1. 上向き矢印キーが押されたら、処理2を実行する。
  2. Y座標を-1ずつ変えた後、もしもプレイヤーがプラットフォームに触れたら変数「縦スピード」の値を12にしてから、Y座標を1ずつ変える。
    ※本処理により、プレイヤーがプラットフォームの上にいるときだけジャンプするようになる。プレイヤーが空中にいるときは、上矢印キーを押してプレイヤーのY座標を1だけ変えてもプレイヤーはプラットフォームに触れないので、変数「縦スピード」の値は12にならずジャンプしない。もしも、プレイヤーがプラットフォームの上にいるときは、プレイヤーのY座標を1だけ変えるとプラットフォームに触れるので、変数「縦スピード」の値が12になり、カスタムブロック「重力」によりプレイヤーはジャンプするようになる。

壁ジャンプのスクリプト
  1. 上向き矢印キーが押されたら、処理2を実行する。
  2. Y変数「縦スピード」の値を12にする。
    ※本処理は、カスタムブロック「横移動」内のプレイヤーがプラットフォームに触れているときだけ実行される。つまり、プレイヤーが左右いずれかのプラットフォームにぶつかっているときに、上向き矢印キーを押せば変数「縦スピード」の値が12になり、壁ジャンプするようになる。
Scratch3.0(スクラッチ3.0)とは?

MITメディアラボにより開発されたビジュアルプログラミング言語。子供たちが物語やゲーム、 アニメーションなどのインタラクティブな作品をプログラミングできる。また、自分の作った作品を世界中の人々と共有できるコミュニティーサイトでもある。世界中で9千万人を超えるユーザがいる。
こちらのホームページにアクセスすれば無料で利用できる。