Scratchでアクションゲームを作る方法|ジャンプ・重力・当たり判定

プログラミング・電子工作






Scratchでアクションゲームを作る方法|ジャンプ・重力・当たり判定







応用 / ゲーム制作

Scratchでアクションゲームを作る方法|ジャンプ・重力・当たり判定

マリオのような、横スクロールアクションゲーム。憧れる方も多いのではないでしょうか。実は、いくつかの仕組みを理解すれば、Scratchだけで作れます。本記事では、3つの要素に絞って解説します。重力の再現、ジャンプの処理、当たり判定です。実際のブロック例とともに、1つずつ丁寧に説明します。難しい物理の知識は、必要ありません。

YOFUKASI LAB編集部
公開日:2026年9月13日
読了目安:24分

執筆・実機検証:YOFUKASI LAB運営者

理学療法士/Arduino・Pythonを使った医療機器制作・学会発表経験あり

🎮 最初に、ざっくりまとめます

むずかしい話は、あとで説明します。まずは全体のイメージだけつかんでください。

🍎

重力って何?

キャラクターを、毎回少しずつ下に動かし続ける処理です。「落ちる感覚」を作り出します。

🦘

ジャンプって何?

一瞬だけ、上向きの勢いを与える処理です。そのあとは、重力が自然に引き戻します。

💥

当たり判定って何?

2つのキャラクターが触れたかどうかを、常にチェックする処理です。

🎯

誰向けの内容?

Scratchの基本操作を知っている方が対象です。ゲーム制作の一歩先に進みたい方におすすめです。

まとめ:3つの仕組みを組み合わせるだけで、本格的なアクションゲームが作れます。1つずつ、順番に試してみましょう。

Chapter 01 / Three Elements

01アクションゲームに必要な3つの要素

Scratchアクションゲームに必要な重力・ジャンプ・当たり判定の3つの基本

アクションゲームと聞くと、難しそうに感じるかもしれません。しかし、分解してみると、シンプルな要素の組み合わせです。本記事では、3つの要素に注目します。

1重力

キャラクターを、常に下へ引っ張る力です。これがないと、キャラクターは宙に浮いたままになってしまいます。

2ジャンプ

重力に逆らって、一瞬だけ上へ飛び上がる動きです。ボタンを押した瞬間に、上向きの勢いを与えます。

3当たり判定

キャラクターと、地面・敵・アイテムが触れたかどうかを調べる処理です。ゲームのルールの根幹を支えています。

この3つを組み合わせれば、多くのアクションゲームの基本形が完成します。1つずつ、順番に作っていきましょう。



Chapter 02 / Preparation

02準備するもの

特別な準備は、必要ありません。Scratchの画面を開くだけです。今回は、2つのスプライトを用意しましょう。プレイヤー役のキャラクターと、地面役のスプライトです。地面は、画面の下の方に、横長の四角形を描くだけで十分です。ペイントエディタで、簡単に作成できます。

Chapter 03 / Gravity

03重力を再現する

Scratchで重力と地面の当たり判定を作る仕組み

まずは、重力の仕組みから作りましょう。考え方は、シンプルです。「毎回、少しだけy座標を減らし続ける」。これだけです。

速度という変数を用意する

ただy座標を減らすだけでは、不自然な動きになります。本物の重力に近づけるには、「速度」という考え方が必要です。落ち始めは、ゆっくり落ちます。時間が経つほど、落ちる速さが増していきます。この「加速する感じ」を、変数で表現します。

ブロックの構成イメージ

[変数 速度y を作る]

[緑の旗が押されたとき]
  [変数 速度y を 0 にする]
  ずっと
    [変数 速度y を -1 ずつ変える]
    [y座標を (速度y) ずつ変える]

「速度y」という変数を、毎回-1ずつ減らしています。この値を、y座標に足し続けています。最初はゆっくり、だんだん速く落ちていく。この処理だけで、自然な落下が再現できます。ただし、このままでは、キャラクターが地面をすり抜けて、画面の外まで落ち続けてしまいます。次の章で、この問題を解決します。



Chapter 04 / Ground Collision

04地面との当たり判定

地面に着地したら、落下を止める処理を加えましょう。「もし地面に触れたなら、速度をゼロにする」という考え方です。

ブロックの構成イメージ

[緑の旗が押されたとき]
  [変数 速度y を 0 にする]
  ずっと
    [変数 速度y を -1 ずつ変える]
    [y座標を (速度y) ずつ変える]
    もし <地面 に触れた> なら
      [変数 速度y を 0 にする]
      [y座標を 1 ずつ変える]

「地面に触れた」ときに、速度yを0に戻しています。これで、それ以上落ち続けることはありません。最後に「y座標を1ずつ変える」という行があります。これは、地面にめり込んでしまうのを防ぐ、小さな補正です。ちょうど地面の表面に、キャラクターが乗っている状態を保てます。

Chapter 05 / Jump

05ジャンプ処理を作る

Scratchで地面にいるときだけジャンプできる仕組み

重力の土台ができました。次は、ジャンプです。考え方は、意外とシンプルです。「スペースキーが押されたら、速度yに、一瞬だけ大きなプラスの値を与える」。これだけです。あとは、3章で作った重力の処理が、自動的にキャラクターを引き戻してくれます。

ブロックの構成イメージ

[緑の旗が押されたとき]
  [変数 速度y を 0 にする]
  ずっと
    [変数 速度y を -1 ずつ変える]
    [y座標を (速度y) ずつ変える]
    もし <地面 に触れた> なら
      [変数 速度y を 0 にする]
      [y座標を 1 ずつ変える]
      もし <スペースキーが押された> なら
        [変数 速度y を 15 にする]

大切なポイントがあります。「もし地面に触れたなら」という条件の、内側にジャンプの判定を置いていることです。こうすることで、地面にいるときだけ、ジャンプができるようになります。空中で何度もジャンプできてしまう、という不自然な動きを防げます。



Chapter 06 / Horizontal Movement

06横移動と組み合わせる

ここまでで、縦方向の動きが完成しました。左右の移動も、加えてみましょう。

ブロックの構成イメージ

[緑の旗が押されたとき]
  [変数 速度y を 0 にする]
  ずっと
    もし <右向き矢印キーが押された> なら
      [x座標を 5 ずつ変える]
    もし <左向き矢印キーが押された> なら
      [x座標を -5 ずつ変える]
    [変数 速度y を -1 ずつ変える]
    [y座標を (速度y) ずつ変える]
    もし <地面 に触れた> なら
      [変数 速度y を 0 にする]
      [y座標を 1 ずつ変える]
      もし <スペースキーが押された> なら
        [変数 速度y を 15 にする]

縦方向の処理(重力・ジャンプ)と、横方向の処理(左右移動)を、同じ「ずっと」ブロックの中に並べています。この2つは、独立して動きます。ジャンプ中でも、左右に移動できます。マリオのような、横スクロールアクションらしい動きになりました。

Chapter 07 / Enemy Collision

07敵との当たり判定でゲームオーバーにする

Scratchで敵との当たり判定やコイン取得と二段ジャンプを作る方法

敵のスプライトを、新しく用意しましょう。敵に触れたら、ゲームオーバーになる処理を作ります。

ブロックの構成イメージ(プレイヤーのスプライトに追加)

ずっと
  もし <敵 に触れた> なら
    [「やられた!」と 2 秒言う]
    [すべてを止める]

「もし〜なら」ブロックで、敵との接触を、常にチェックしています。触れたら、メッセージを表示して、「すべてを止める」ブロックで、プログラム全体を停止させています。もっと複雑なゲームオーバー処理(画面の切り替えなど)も、この仕組みを土台にして作れます。



Chapter 08 / Item Collection

08コインなどのアイテムを取得する

コインのスプライトを用意しましょう。触れたら、スコアが増えて、コインが消える処理です。

ブロックの構成イメージ(コインのスプライトに追加)

[変数 スコア を作る]

[緑の旗が押されたとき]
  [表示する]
  ずっと
    もし <プレイヤー に触れた> なら
      [変数 スコア を 1 ずつ変える]
      [隠す]

触れた瞬間に、スコアを1増やし、「隠す」ブロックでコインを見えなくしています。「隠す」だけなので、スプライト自体は残っています。複数のコインを配置したい場合は、このスプライトを複製すれば、同じ仕組みをそのまま使い回せます。

Chapter 09 / Double Jump

09独自アイデア:二段ジャンプ

空中でもう一度ジャンプできる、二段ジャンプを作ってみましょう。ジャンプの回数を数える、新しい変数を使います。

ブロックの構成イメージ

[変数 ジャンプ回数 を作る]

[緑の旗が押されたとき]
  [変数 速度y を 0 にする]
  [変数 ジャンプ回数 を 0 にする]
  ずっと
    [変数 速度y を -1 ずつ変える]
    [y座標を (速度y) ずつ変える]
    もし <地面 に触れた> なら
      [変数 速度y を 0 にする]
      [変数 ジャンプ回数 を 0 にする]
    もし <スペースキーが押された> かつ <ジャンプ回数 < 2> なら
      [変数 速度y を 15 にする]
      [変数 ジャンプ回数 を 1 ずつ変える]

地面に着地したときに、ジャンプ回数を0にリセットしています。ジャンプするたびに、回数を1つ増やしています。回数が2未満のときだけ、ジャンプできるようにしています。これにより、地上で1回、空中でもう1回、合計2回のジャンプが可能になります。



Chapter 10 / Invincibility

10独自アイデア:無敵時間を作る

敵に当たった直後、少しの間だけ無敵になる仕組みも、よく使われます。連続でダメージを受け続ける不公平感を、なくすための工夫です。

ブロックの構成イメージ

[変数 無敵中 を作る]

[緑の旗が押されたとき]
  [変数 無敵中 を 0 にする]
  ずっと
    もし <敵 に触れた> かつ <無敵中 = 0> なら
      [変数 体力 を -1 ずつ変える]
      [変数 無敵中 を 1 にする]
      [1 秒待つ]
      [変数 無敵中 を 0 にする]

「無敵中」という変数が、0か1かで、状態を管理しています。敵に触れても、無敵中が1のときは、条件が満たされないため、何も起こりません。「1秒待つ」の間だけ、無敵状態が続きます。数値を変えれば、無敵時間の長さを自由に調整できます。

Chapter 11 / Slopes and Variable Jump

11独自アイデア:坂道・可変ジャンプ

ボタンを押す長さでジャンプの高さを変える

スペースキーを押す時間の長さで、ジャンプの高さを変える、というテクニックもあります。短く押せば低いジャンプ、長く押せば高いジャンプです。

もし <スペースキーが押された> かつ <地面に触れた> なら
  [変数 速度y を 15 にする]
もし <スペースキーが押されていない> かつ <速度y > 5> なら
  [変数 速度y を 5 にする]

スペースキーを早く離すと、速度yが強制的に小さくされます。上昇が、途中で頭打ちになるのです。多くの市販アクションゲームでも、実際に使われているテクニックです。



Chapter 12 / Next Step

12次のステップ

ここまでの仕組みを組み合わせれば、簡単なアクションゲームが完成します。次のステップとして、いくつかの道があります。

画面の外の世界とつなげる

作ったゲームを、画面の中だけで終わらせない方法もあります。Scratchのブロックのまま、LEDやセンサーと組み合わせる方法です。ジャンプするたびにLEDを光らせる、といった演出も作れます。

文字のコードへ進む

本格的なゲームエンジンに興味が出てきた方もいるでしょう。PythonのPygameやPyxelといったツールでは、同じ重力・当たり判定の考え方を、文字のコードで実装します。Scratchで身につけた考え方は、そのまま役に立ちます。



Chapter 13 / Troubleshooting

13よくあるトラブルと対処法

症状 主な原因 対処法
キャラクターが地面をすり抜ける 当たり判定の処理が抜けている 4章の「地面に触れた」ブロックを確認する
ジャンプが不自然に重い・軽い 速度yの初期値が合っていない 数値を少しずつ変えて、好みの感覚に調整する
空中で何度もジャンプできる 地面判定の内側にジャンプ処理がない 5章の入れ子構造を確認する
敵に一瞬で何度も当たり判定される 無敵時間の処理がない 10章の仕組みを追加する
!

数値は「正解」を探すのではなく「感覚」で調整する

重力やジャンプの数値には、絶対的な正解がありません。実際にプレイしながら、少しずつ数値を変えてみましょう。「気持ちいい」と感じる感覚を、自分の手で探すことが、ゲーム作りの醍醐味です。

編集部想定シナリオ

ゲーム作りに挑戦していたMさんがいた。ジャンプを実装したが、キャラクターが地面にめり込んでしまう症状に悩んでいた。ブロックを何度も見直したが、原因が分からなかった。そこで、4章の内容を見直した。「y座標を1ずつ変える」という、めり込み防止の補正が、抜けていたことに気づいた。1行を追加すると、症状はすぐに解決した。小さな1つのブロックが、動きの自然さを大きく左右することもあります。

Chapter 14 / FAQ

14よくある質問

基本のQ&A

Q.重力の数値は、どれくらいにすればいいですか?
A.決まった正解はありません。1〜2程度の小さな値から試すのがおすすめです。数値を大きくすると、キャラクターが重たく、速く落下するようになります。数値を小さくすると、ふわふわとした軽い動きになります。実際に動かしながら、好みの感覚を探ってみてください。

Q.ジャンプ中に、もう一度ジャンプできてしまいます。
A.「地面に触れているときだけジャンプできる」という条件が、抜けている可能性があります。スペースキーが押されたときの処理に、「もし地面に触れているなら」という条件を追加しましょう。本記事の5章で、詳しく解説しています。

応用のQ&A

Q.当たり判定が、思った通りに反応しません。
A.スプライトの周りにある、透明な余白が原因のことが多いです。絵を描いた範囲より、実際の当たり判定の範囲が、少し広くなっていることがあります。コスチュームを編集する画面で、絵の周りの余白を削ってみてください。

Q.初心者でも、アクションゲームは作れますか?
A.作れます。一見難しそうに見えますが、仕組みを分解すると、シンプルな計算の繰り返しです。本記事で紹介する手順を、1つずつ試してみてください。難しい数学の知識は必要ありません。

関連記事・参考資料

基礎を学べる記事

  1. YOFUKASI LAB「Scratch入門|使い方・始め方を初心者向けにやさしく解説」2026年, https://yofukasi-lab-wp.com/2026/09/13/scratch-getting-started/
  2. YOFUKASI LAB「Scratchで電子工作入門|LED・センサーを動かして学ぶプログラミング」2026年, https://yofukasi-lab-wp.com/2026/09/13/scratch-electronics-getting-started/

応用・関連記事

  1. YOFUKASI LAB「Pygame入門|Pythonでゲームを作る方法」2026年, https://yofukasi-lab-wp.com/2026/09/05/pygame-python-game/
  2. YOFUKASI LAB「Pyxelの使い方|ゲーム制作をゼロから解説」2026年, https://yofukasi-lab-wp.com/2026/07/11/pyxel/

参考資料(外部・一次情報)

  1. Scratch公式サイト, https://scratch.mit.edu/
  2. Scratchウィキ「Simulating Gravity」, https://en.scratch-wiki.info/wiki/Simulating_Gravity

※本記事は個人の学習用途を対象にしています。教育機関での利用については、各校・各団体の方針もあわせてご確認ください。


関連記事

特集記事

コメント

この記事へのコメントはありません。

TOP
CLOSE