スクラッチで、簡単プラットフォーマーゲームを作ってみた
2019-1-31
今回、Scratchでプラットフォーマーゲームを作ってみました。
-
Heppocode Platformer - 完成版
https://scratch.mit.edu/projects/283207673 -
Heppocode Platformer スタジオ - 開発の流れ
https://scratch.mit.edu/studios/5864371/
マリオブラザーズみたいなステージ型のアクションゲームを「プラットフォーマー」と呼びます。キーボードで操作して、ジャンプで障害をよけて、ゴールを目指します。Scratchで定番のゲームなので、遊んだことがある人も多いでしょう。
ここでは、このゲームを作る大ざっぱな流れと、プログラムの途中経過を紹介しています。けっこうシンプルなゲームので、ぜひオリジナルのプラットフォーマーを作ってみてください。
01.プレイヤーのキャラクターを用意する
プログラムを作る時、単純なところから始めて、少しずつ機能を加えていくのがオススメです。そこで、 とりあえず簡単なキャラクターを描いて、土台の上で動かしてみましょう。
- 01.プレイヤーのキャラクターを用意する - Heppocode Platformer
https://scratch.mit.edu/projects/280663320/
作る機能
- スプライトに、プレイヤーのキャラクターをかく。今回はシカク。
- 重力で落下させる:「Yスピード」変数で、落下の移動量をあらわす。
- 土台にさわったら、とまる
画像をクリックすると、そのプロジェクトに移動します。
シンプルなプログラムなので、ぜひ中を見てみてください
ヒント:重力で落下させる方法
落下は、playerのスプライトで次の2つのステップをくりかえしています。
-
ステップ1:プレイヤーの「Y座標」を「Yスピード」ずつ変える
-
ステップ2:「Yスピード」を一定量だけ早く(マイナス)する
スピードとは、"一定の時間で移動する距離"としてあらわすことができます。たとえば、時速100キロメートルは、1時間に100キロメートル移動するスピードのことです。そして、落下する時には、そのスピードが一定量ずつマイナス方向に増えていきます。
落下中に土台にさわったら、落下を止めます。この時、ちょうど土台のところで止まらないで、ちょっと行きすぎてしまうことがあります。その場合、一つ前の位置まで戻して、土台にさわらなくなるまで、下にちょっとずつ移動します。
ただし、そのままでは最後の調整が見えてしまうので、「じめんにタッチ」ブロックを定義して、"画面を再描画せずに実行する"を有効にしておきます。
02.移動とジャンプ
続いて、矢印キーで移動、スペースキーでジャンプさせましょう。これで、ちょっとだけゲームを操作できるようになります。
- 02.移動とジャンプ - Heppocode Platformer on Scratch
https://scratch.mit.edu/projects/280680283/
作る機能
- 右矢印キーで、右に移動する
- 左矢印キーで、左に移動する
- スペースキーで、ジャンプする
ヒント:ジャンプ
左右の移動は、メインのループの中にあります。スペースキーは、イベントブロックにしてあります。すべてイベントブロックでもいいんですが、同時にキーを押したとき、取りこぼしがあるみたいなので分けています。
ジャンプするには、「Yスピード」をプラスにします。「Yスピード」がプラスの間は、Y座標が増加するので、プレイヤーは上方向に移動します。でも、落下があるので、「Yスピード」は一定量ずつ小さくなります。そして、マイナスになると下方向に移動をはじめます。
ここでは、地面にふれている時だけ、ジャンプさせています。スペースキーを押したら、y座標を「-1」だけずらして、地面にふれているか調べます。
03.いきおいをつける
さらに、プレイヤーの動きにいきおいをつけましょう。
先ほどは、キーを押している間だけ横移動しました。ジャンプ中も、横移動をやめると、まっすぐ落下します。
これからは、すぐに横移動で止まらず、惰性で少しずつ遅くなります。
また、ジャンプ中は、横移動の速度が落ちないようにします。
- 03.勢いをつける - Heppocode Platformer on Scratch
https://scratch.mit.edu/projects/282655731/
作る機能
- 「たて移動」と「よこ移動」のブロックを追加
- 「Xスピード」と「X方向」の変数を追加
- キーが押されたら、XスピードとX方向をセットする
- それ以外の場合、少しずつXスピードを遅くする
- 「ジャンプ中?」変数を追加
- ジャンプ中は、横移動のスピードを遅くしない
ヒント:いきおいを表現する方法
「勢い」「惰性」を表現するために、「Xスピード」と「X方向」という変数を追加しました。そして、キーを押したら、すぐに位置を変えるのではなく、 「Xスピード」と「X方向」 に値をセットしています。実際に位置を変えるのは、キー操作とは関係なく行います。
このあたりの方法は、落下の重力と少し似ているので比べてみるといいでしょう。
04.ドアと穴を追加する
次は、ステージに出口と障害物を用意しましょう。ドアにさわると、次のステージに切り替えます。穴におちたら最初から。
- 04.ドアとアナを追加する - Heppocode Platformer on Scratch
https://scratch.mit.edu/projects/282975498/
作る機能
- 現在の背景に、出口を追加する
- 背景を追加して、次のステージを描く
- プレイヤーが出口にふれたら背景を切り替え、プレイヤーの位置をリセット
- 背景に障害(穴)を追加。穴の底は紫色
- 紫色 にふれたら、プレイヤーの位置をリセットする
ステージは、背景を追加していくだけなので簡単ですね。
問題発生
ステージを切り替えできると、いろいろな障害をクリアできるようになりますが、問題も見つかります。たとえば、下から天井にぶつかったとき、ワープてしまいます。カベにぶつかると、勝手に乗りこえてしまいます。
そこで、次のステップで、天井やカベにさわったら、位置を直すようにコードを変更します。
05.天井やカベにさわったら、位置を直す
ここでは、カベや天井にぶつかったときの処理を作ります。
- 05.天井やカベの処理 - Heppocode Platformer on Scratch
https://scratch.mit.edu/projects/282981845/
作る機能
- 床や天井にふれた場合、Y方向(縦の移動方向)に合わせて調整する
- 横移動でカベにふれた場合、離れる
ヒント:Y方向の検出
「Y方向」は、「Yスピード」から計算しています。「Yスピード」が0だったら、「Y方向」もゼロです。上昇中は1になり、落下中は-1になります。この計算のために、「Yスピードの絶対値」を「Yスピード」で割っています。
06.壁ジャンプ
さらに、アクションをふやしてみましょう。
カベにふれた時、ジャンプの上昇中なら、スペースキーでカベジャンプ!
- 06.カベジャンプ - Heppocode Platformer on Scratch
https://scratch.mit.edu/projects/283147005/
作る機能
- ジャンプの上昇中でカベジャンプ!
- スペースキーを追加
- 同じカベで、連続カベジャンプしない
ヒント:同じカベで、連続カベジャンプを防ぐ
同じカベで、連続カベジャンプができてしまうと、カベをよじ登るようになってしまいます。これを防ぐために、「かべジャンプ?」変数を追加しています。この変数には、カベジャンプしたときの「X方向」を格納します。そして、カベジャンプの時に、「X方向」が違っているかどうかチェックします。
07.ステージを増やして完成
最後に、ステージを増やしたり、効果音やスタートページを追加すれば完成です。つくってみたら、難しすぎたので、難易度を調整しました。
- Heppocode Platformer - 完成版
https://scratch.mit.edu/projects/283207673
ここからが、ゲームデザイナーのうでの見せ所ですね。
やってみよう!
というわけで、「プラットフォーマー」の開発手順を紹介しました。各ステップのコードは、スタジオにまとめてあります。
面白いゲームができたら、ぜひ教えてくださいね。
- Heppocode Platformer スタジオ - 開発の流れ
https://scratch.mit.edu/studios/5864371/
他のプラットフォーマーチュートリアル
「Youtube:グリフパッチのプラットフォーマー開発チュートリアルをやってみた」は、8万人以上のフォロワーがいる人気のスクラッチャー:グリフパッチさんがYoutubeで公開しているPlatformerチュートリアルを解説したものです。本格的なプラットフォーマーゲームを作るとき、とても役立つと思います。