【スクラッチ】滑らかに跳ぶジャンプゲームの作り方と重力コード
Scratch(スクラッチ)でアクションゲームや障害物避けゲームを作ろうとした際、多くの人が最初にぶつかる壁が「ジャンプの動きがカクカクして不自然」「キャラクターが地面に埋まって動かなくなる」「ジャンプボタンを連打すると空を無限に飛んでしまう」といった動作の不具合です。直感的なブロックプログラミングとはいえ、ゲームらしい心地よい操作感を再現するには、物理的な「重力」と正確な「着地判定」の仕組みを正しく理解しなければなりません。
プログラミング教育が定着した現在、教育現場やコンテストでも作品の「手触りの良さ」が重視される傾向にあります。本稿では、プログラミング初心者でも迷わず実装できる基本のジャンプ構造から、本格的な横スクロールや二段ジャンプへの拡張テクニックまで、現場の指導ノウハウを交えて論理的に解説します。
📌 【この記事の重要ポイントまとめ】
- 要点1:自然なジャンプには「Y座標の変え方」だけでなく、時間の経過とともに落下速度が増す「重力用変数」の導入が不可欠。
- 要点2:地面への埋まりや無限浮遊の真相は「着地判定スクリプト」の条件分岐とフレーム更新順序の不整合にある。
- 要点3:基本の重力構造をマスターすれば、障害物ゲームや二段ジャンプ、横スクロールへの応用もわずかなブロック追加で実現できる。
【2026年最新】Scratchで滑らかに跳ぶ!ジャンプゲーム重力プログラムの基本構造
Scratchプログラミング初心者がやりがちな典型的なミスは、「上向き矢印キーが押されたとき」に「Y座標を10ずつ変える」を10回繰り返し、その後に「Y座標を-10ずつ変える」を10回繰り返すという直線的な記述です。この方法では、エレベーターのように等速で上昇して急停止し、等速で落下するため、マリオなどのアクションゲーム特有の「ふわりと浮いてスッと落ちる」放物線の挙動が再現できません。
滑らかな跳躍を表現する唯一の正解は、スクラッチ変数作り方を活用して「ジャンプ力(縦方向の移動スピード)」という変数を1つ作成し、そこに毎フレーム重力を加算していく物理モデルを組むことです。
具体的なスクリプトの組み立て手順は以下の通りです。
まず、変数パレットから「ジャンプ力」という変数を新規作成します。メインのループ処理となるずっと繰り返すブロックの中で、常に「Y座標を(ジャンプ力)ずつ変える」を実行し、直後に「ジャンプ力を(-1)ずつ変える」を配置します。これにより、上方向へのスピードが毎フレーム1ずつ減少し、やがてマイナスに転じて自動的に落下へと移行します。
ジャンプの始動は極めてシンプルです。「もし上向き矢印キーが押されたなら」という条件分岐の中で、「ジャンプ力を12にする」といった具合に正の初期値をセットするだけで、リアルな慣性を持った放物線ジャンプが完成します。
【実態検証】なぜ地面に埋まるのか?着地判定スクリプトの落とし穴と解決策
重力プログラムを導入した直後、現場の学習者がほぼ100%直面するのが「着地判定のバグ」です。ジャンプしたスプライトが地面を突き抜けて画面外に落ちてしまったり、足元が地面のスプライト深くにめり込んで動けなくなったりする現象には、明確な構造的原因が存在します。
Scratchは1秒間に約30フレーム(30FPS)の描画間隔で処理を更新しています。落下スピードが加速して「ジャンプ力」が「-15」に達していた場合、キャラクターは1フレームで15ピクセル下へワープします。その結果、「地面に触れた瞬間」を通り越して「地面の中にめり込んだ状態」で判定ブロックが実行されてしまうのです。
このめり込み問題を根本から解決するのが、以下の「位置補正スクリプト」です。
「もし(地面)に触れたなら」ブロックの内側に、「(地面に触れた)ではない まで繰り返す」ブロックを配置し、その中で「Y座標を1ずつ変える」を実行します。さらに、着地が完了した合図として「ジャンプ力を0にする」を確実に実行してください。この数ブロックの補正を入れるだけで、どれほど高速で落下しても足元が地面の表面にピタリと吸着するようになります。
【徹底比較】スクラッチジャンプの作り方における4つの実装方式
アクションゲームの規模やゲーム性に応じて、採用すべきジャンプのスクリプト構造は異なります。以下の比較表を参考に、自身の制作物に最適な方式を選択してください。
| 実装方式 | 難易度とコード量 | メリット・操作感 | デメリット・注意点 |
|---|---|---|---|
| ① 簡易固定ジャンプ(Y座標の単純増減) | 初級(ブロック数:約8個) | 変数が不要で初心者でも数分で組める。 | 動作が機械的でカクつく。空中制御や二段ジャンプへの拡張が困難。 |
| ② 重力変数ジャンプ(標準物理モデル) | 中級(ブロック数:約15個) | 放物線を描く滑らかな跳躍。ジャンプの高さ調整が容易。 | 着地判定の補正コードを正しく組まないと地面に埋まるリスクがある。 |
| ③ 二段ジャンプ対応型(状態管理フラグ付き) | 中級〜上級(ブロック数:約20個) | 爽快感の高い空中アクションが可能。難関ステージのギミックに最適。 | 着地時にジャンプ回数をリセットする処理を忘れると無限ジャンプになる。 |
| ④ プラットフォーム型(坂道・壁判定対応) | 上級(ブロック数:約35個以上) | 傾斜のある地面や壁キックなど市販ゲーム並みの挙動が再現可能。 | 定義ブロック(カスタムブロック)の画面再描画オフ設定など高度な知識が必要。 |
【応用編】二段ジャンプとスクラッチ障害物ゲーム作り方への拡張
基本の重力と着地判定が完成したら、ゲーム性を一気に高める拡張ギミックを実装していきましょう。
1. 空中で爽快に跳ぶ「スクラッチ二段ジャンプ作り方」
二段ジャンプを成立させるには、変数をもう1つ追加して「ジャンプ回数」を管理します。ゲーム開始時および地面に着地したタイミングで「ジャンプ回数を0にする」と設定。上向き矢印が押された条件の中に「もし(ジャンプ回数)< 2 なら」という条件を追加し、ジャンプを実行するたびに「ジャンプ回数を1ずつ変える」処理を通します。これだけで、空中で1度だけ追加ジャンプが発動するスマートな制限ロジックが完成します。
2. 流れてくる敵を跳び越える「障害物ゲームの基本設計」
障害物側はクローン機能を使って実装します。旗が押されたら本体を隠し、「ずっと(1.5〜3秒)待つ」のあとに「自分自身のクローンを作る」を実行。クローンされた側は「X座標を240、Y座標を地面の高さにする」で右端に現れ、「X座標が-230より小さいまで、X座標を-6ずつ変える」で左方向へ走らせます。壁際で消去する際は、端の誤作動を防ぐため「もし端に着いたら跳ね返る」ではなく「このクローンを削除する」で確実にメモリを解放するのが処理落ちを防ぐ鉄則です。
3. 広大なステージを冒険する「スクラッチ横スクロールゲーム」への展開
主人公を画面中央付近に固定したまま背景スプライトのX座標を「背景スクロールX」という変数で動かすことで、シームレスな横スクロールアクションへ発展させることができます。ジャンプの重力処理自体は主人公スプライト単体で完結しているため、スクロール機構を追加してもそのまま流用できる点がこの設計の強みです。
一般に知られていない盲点とネットの誤解
インターネット上のチュートリアルや古い動画講座には、現代のScratch環境では推奨されない実装パターンが散見されます。特に注意すべき2つの誤解を是正しておきます。
第一の誤解は、「地面の判定にスプライトではなく『色に触れた』ブロックを使うこと」です。背景の特定カラー(例えば緑色)で着地判定を行うと、キャラクターの衣装デザイン変更や背景のグラデーション塗装によって判定が狂い、突然すり抜けバグが発生します。着地判定は必ず「地面専用のスプライト」を用意し、「(地面のスプライト)に触れた」ブロックで判定するのが堅牢なプロジェクト設計の基本です。
第二の誤解は、「〜まで待つブロックをジャンプキー判定に乱用すること」です。「キーが押されたまで待つ」を使うと、その間スクリプト全体の進行がストップし、障害物の移動や敵の動きがカクつく原因になります。すべての判定はメインループの「もし〜なら」による並行判定で処理するのがプログラミング教育的にも正しいアプローチです。
【プロの結論】自作ゲームを完成させるための設計判断
本格的な重力ジャンプを導入すべきなのは、「操作の気持ちよさを競うアクションゲーム」や「障害物の回避タイミングがシビアなゲーム」を作る場合です。一方で、クイズゲームや紙芝居ストーリーの中で単にキャラクターを1回ピョンと跳ねさせたいだけの場合は、複雑な重力変数を使わず、単純な座標移動ブロックで手早く演出を済ませる方が開発効率の観点から合理的と言えます。
【スクラッチ ジャンプ ゲーム】に関するよくある質問(FAQ)
Q1:ジャンプボタンを連打するとキャラクターが無限に空へ飛んでいってしまいます。
A1:ジャンプの開始条件に「着地しているときのみ」という制限が入っていないことが原因です。「もし上向き矢印キーが押されたなら」の条件を「もし<上向き矢印キーが押された>かつ<地面に触れた>なら」に変更するか、「ジャンプ中」フラグ変数を用いて接地状態を厳密に管理してください。
Q2:ジャンプ力を大きくすると、天井を突き抜けてしまいます。
A2:上方向に障害物があるゲームでは、着地判定と同様に「天井判定」が必要です。「ジャンプ力」がプラスの状態で天井スプライトに触れた場合、強制的に「ジャンプ力を0にする」を実行して即座に落下へ転じさせるスクリプトを追加してください。
Q3:スマホやタブレットのタップ操作でジャンプさせるにはどうすればよいですか?
A3:「キーが押された」の代わりに、「画面がタップされた(マウスが押された)」ブロックを条件にするか、画面右下にジャンプボタン専用のスプライトを配置し、「このスプライトが押されたとき」にメッセージを送ってジャンプ処理をトリガーするのが最も確実です。
まとめ:今後の動向と失敗しないための判断基準
Scratchにおけるジャンプの実装は、単なるキャラクターの上下移動ではなく、「変数を使った物理量のシミュレーション」と「フレームごとの当たり判定処理」を学ぶための最高の実践教材です。等速直線運動から放物線運動へのステップアップを理解することは、将来UnityやUnreal Engine、JavaScriptなどの本格的なゲーム開発環境へ移行する際にもそのまま活きる強固な基礎となります。
まずは「重力用変数」を1つ作ったシンプルな放物線ジャンプからスタートし、地面補正スクリプトで埋まりバグを解消した上で、障害物クローンや二段ジャンプといったギミックへ段階的に拡張していきましょう。仕組みを論理的に整理して組み立てれば、思い描いた通りの爽快なジャンプアクションゲームが必ず完成します。 (出典: スクラッチ ジャンプ ゲーム(Yahoo!ニュース))