スクラッチコーチキャンプ スクラッチで使える無料素材集
  • 素材
  • 修行
  • はじめての方へ
  • スクラッチゲームの作り方

    マイクラの「ゾンビお家に帰ろう」プラットフォーマーの作り方 #1

    マイクラの「ゾンビお家に帰ろう」プラットフォーマーの作り方 #1
    この記事は スクラッチコーチで掲載されているオリジナル記事 のバックアップです。
    スターター作品
    なし
    今回の完成サンプル
    なし
    [soy-series name="スクラッチでマインクラフト風ゾンビプラットフォーマーの作り方"]

    さぁ、スクラッチでナニ作る!?

    チュートリアルの元になった作品

    [prj-embed prj="719355918" mini="1" title="プレイしておこう"]今回の[prj-link prj="719355918"]スクラッチを作る参考作品[/prj-link]にさせていただきました、ありがとう![/prj-embed]

    マインクラフト風の横スクロールプラットフォーマーゲーム。ゾンビ親子を操作して溶岩や障害物を避けながらステージを進み、ゴールを目指す。griffpatch式の壁登り・壁ジャンプ、昼夜サイクルによるダメージゾーン、sin波による月の脈動アニメーション、ゴールセレブレーション演出など多彩な仕組みを持つ

    今回の目標

    • 矢印キーやマウスで左右移動・ジャンプができる、マイクラ風ゾンビキャラクターを作る
    • 4段階ネストの壁登り・壁ジャンプと重力演算による本格的な物理移動を実装する
    • 溶岩ダメージ・昼夜サイクル・ゴールセレブレーション演出を持つ11ステージのゲームを完成させる

    スターター作品をリミックスしよう

    このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
    スターター作品をダウンロード

    このチュートリアルでは作者さんの実装方法を尊重して作ってますが、最低限の改善をしてます。(参考作品と同じものが完成するわけではない点はご注意)

    #1背景の初期化

    [talk class="m-l-n"]まずはステージの背景を設定するよ。ゲームが始まるたびに、必ず最初のステージの風景からスタートするようにしておくんだ。[/talk]

    準備

    スプライト「stage」を開く

    ステージ
    スプライトについて
    背景管理。初期背景の設定、ステージ進行時の背景切替、昼夜サイクルの制御を行う

    実装

    step-0

    イベント .st0 { fill: #45993D; } .st1 { fill: #4CBF56; } greenflag が押されたとき で旗が押されたら、 見た目 背景を ( ) にする で「背景1」に切り替えよう。これがゲームの出発点になるよ。

    #2地面の準備

    [talk class="m-l-n"]地面スプライトの初期設定をするよ。マインクラフト風の地形がステージの土台になるんだ。[/talk]

    準備

    スプライト「地面」を開く

    地面地面
    スプライトについて
    ステージごとの地形を表現するスプライト。コスチュームでステージの地形が切り替わる
    どんな役割か
    マインクラフト風のステージ地形を作るよ。コスチュームを切り替えるだけで次のステージの地形になるんだ。

    実装

    step-1

    見た目 ( ) へ移動する で最背面に配置して、キャラクターや障害物の後ろに表示されるようにしよう。 見た目 コスチュームを ( ) にする でステージ1の地形コスチュームに切り替えるよ。

    #3地面の位置固定

    step-2

    地面をステージ上の正しい位置に固定するよ。 制御 ずっと ループの中で 動き x座標を ( ) 、y座標を ( ) にする を使い、x座標36、y座標29に置き続けるんだ。

    制御 ずっと で位置を固定し続けているのは、他の処理で地面がずれても自動で戻るようにするためだよ。

    #4障害物の初期化

    [talk class="m-l-n"]溶岩トラップを用意するよ。ゾンビが触れるとダメージを受ける危険な障害物だ。[/talk]

    準備

    スプライト「障害物」を開く

    障害物障害物
    スプライトについて
    溶岩やトラップの障害物。触れるとダメージを受けてスタート地点に戻される
    どんな役割か
    溶岩や障害物を作るよ。ゾンビが触れるとダメージを受けてスタート地点に戻されるんだ。ステージごとに配置が変わるよ。

    実装

    step-3

    イベント .st0 { fill: #45993D; } .st1 { fill: #4CBF56; } greenflag が押されたとき で旗が押されたら、 見た目 コスチュームを ( ) にする でlavaコスチュームに切り替えよう。このコスチュームがステージ1の溶岩配置を決めているんだ。

    #5ゴールエリアの設定

    [talk class="m-l-n"]各ステージのゴール地点を作るよ。ゾンビがここに触れるとステージクリアだ。[/talk]

    準備

    スプライト「ゴールトリガー」を開く

    ゴールトリガーゴールトリガー
    スプライトについて
    各ステージのゴール判定エリア。プレイヤーが触れるとゴールメッセージを送信する
    どんな役割か
    各ステージのゴール地点を作るよ。ゾンビがここに触れるとステージクリアになるんだ。最終ゴールに触れるとクリア演出が始まるよ。

    実装

    step-4

    見た目 表示する で表示して、 見た目 コスチュームを ( ) にする でlavaコスチュームに切り替えるよ。障害物と同じく、コスチュームでステージごとに配置が変わる仕組みなんだ。

    #6ゴールの重ね順

    step-5

    ゴールトリガーを最前面に配置するよ。 見た目 ( ) へ移動する で前面に持ってくることで、他のスプライトの上に重なるようにするんだ。

    レイヤーの順番はScratchのゲーム作りで大事なポイントだよ。当たり判定用のスプライトが他の絵の後ろに隠れてしまうと、触れているのに反応しないバグの原因になるんだ。

    #7月の表示

    [talk class="m-l-n"]夜空を彩る月を表示するよ。ゲームの雰囲気づくりに欠かせない装飾スプライトだ。[/talk]

    準備

    スプライト「月」を開く

    月
    スプライトについて
    夜空に浮かぶ月の装飾スプライト。sin関数でサイズが脈動するアニメーション付き
    どんな役割か
    夜空に浮かぶ月を作るよ。sin関数を使って大きさがゆらゆら変わる脈動アニメーションをつけるんだ。数学を使ったアニメーションの基本を学べるよ。

    実装

    step-6

    見た目 コスチュームを ( ) にする でステージ1に対応するコスチュームに切り替えて、 見た目 表示する で画面に表示しよう。月はステージが進むとコスチュームが切り替わって見た目が変わるよ。

    #8月の脈動アニメーション

    [talk class="m-l-n"]月にゆらゆらと大きさが変わるアニメーションをつけるよ。ただサイズを増減させるだけじゃなく、sin関数を使って自然な揺れを作るんだ。[/talk]

    準備

    変数「★大きさ」を追加

    sin関数の角度入力に使うカウンター。脈動アニメーションの進行を制御する

    変数「★大きさ」を追加

    実装

    step-7

    まず 変数 変数 ( ) を隠す で「★大きさ」変数の表示を隠すよ。 制御 ずっと の中で 変数 ( ) を ( ) ずつ変える を使って「★大きさ」を1ずつ増やし続けるんだ。そして 見た目 大きさを ( ) %にする で、sin(★大きさ × 5) × 10 + 100という計算でサイズを設定するよ。

    この式を分解すると、sin(★大きさ × 5)の部分が-1から1の間で波打つ値を生み出して、×10で振れ幅を±10%に、+100で基準サイズを100%にしているんだ。つまり月は90%〜110%の間でゆっくり膨らんだり縮んだりするよ。×5の値を大きくすると速く脈動するよ。

    [talk]sin関数は数学の授業で習う波の形だけど、実はゲーム開発でもよく使われているんだ。心臓の鼓動、水面の揺れ、キャラクターの呼吸アニメーション――自然界の「繰り返す動き」の多くはsin波で表現できるよ。たった1つの数式で、永遠に自然な揺れが続くんだ。[/talk]

    #9ゾンビを隠す

    [talk class="m-l-n"]ゲーム開始時はまだゾンビを画面に出さないよ。スタートボタンが押されるまで待機させるんだ。[/talk]

    準備

    スプライト「ゾンビ」を開く

    ゾンビゾンビ
    スプライトについて
    プレイヤーキャラクター。左右移動、ジャンプ、壁登り、ダメージ処理、BGM再生を担当
    どんな役割か
    ゾンビを操作してステージを進むプラットフォーマーの主人公を作るよ。矢印キーやマウスで左右移動とジャンプができて、壁にぶつかると自動で登れるようにするよ。

    実装

    step-8

    イベント .st0 { fill: #45993D; } .st1 { fill: #4CBF56; } greenflag が押されたとき で旗が押されたら、 見た目 隠す でゾンビを非表示にしよう。ゲームが始まる前にプレイヤーキャラが見えていたら変だもんね。

    #10ゾンビのコスチューム

    [talk class="m-l-n"]ゾンビの見た目を通常状態のコスチュームに設定するよ。[/talk] step-9

    イベント .st0 { fill: #45993D; } .st1 { fill: #4CBF56; } greenflag が押されたとき で旗が押されたら、 見た目 コスチュームを ( ) にする で「ゾンビ」コスチュームに切り替えよう。ダメージコスチュームのまま次のゲームが始まらないように、毎回リセットしているんだ。

    #11レベル表示の準備

    [talk class="m-l-n"]今どのステージにいるかを示すレベル進捗バーを準備するよ。ゲームが始まる前は隠しておくんだ。[/talk]

    準備

    スプライト「レベル表示」を開く

    レベル表示レベル表示
    スプライトについて
    現在のステージ進捗を表示するスプライト。ステージ進行に合わせてコスチュームが切り替わる
    どんな役割か
    今どのステージにいるか表示するレベル進捗バーを作るよ。ステージが進むたびに表示が更新されるよ。

    実装

    step-10

    見た目 コスチュームを ( ) にする でステージ1のコスチュームに切り替えて、 見た目 隠す で非表示にしよう。スタートボタンが押されたら表示する仕組みだよ。

    #12ゴールエフェクトの準備

    [talk class="m-l-n"]ゴール時のお祝い演出に使うエフェクトスプライトを準備するよ。まだ出番じゃないから隠しておくんだ。[/talk]

    準備

    スプライト「ゴールエフェクト」を開く

    ゴールエフェクトゴールエフェクト
    スプライトについて
    ゴール時の祝福アニメーションスプライト。明滅と指数減衰移動でセレブレーション演出を行う
    どんな役割か
    ゴールした時のお祝いエフェクトを作るよ。キラキラ光りながら画面中央に集まってくるアニメーションで、指数減衰という数学的なテクニックを使うよ。

    実装

    step-11

    見た目 隠す で非表示にして、 見た目 コスチュームを ( ) にする 演算 ( ) から ( ) までの乱数 を使い1か2のコスチュームをランダムに選ぶよ。クリアするたびに違うエフェクトが出るようにしているんだ。

    #13サムネイルの透明化

    [talk class="m-l-n"]サムネイルスプライトを透明にして画面に常駐させるよ。普段は見えないけど、ゴール時に勝利BGMを鳴らす役割があるんだ。[/talk]

    準備

    スプライト「サムネ」を開く

    サムネサムネ
    スプライトについて
    サムネイルオーバーレイ(GHOST100%で非表示)とゴール時の勝利BGM再生を担当
    どんな役割か
    サムネイル画像の表示とゴール時の勝利BGMを再生するスプライトだよ。ゲーム中は透明で見えないけど、ゴールすると勝利の音楽が流れるよ。

    実装

    step-12

    制御 ずっと の中で 見た目 ( ) の効果を ( ) にする のゴースト効果を100にして完全に透明にするよ。 見た目 ( ) へ移動する で最前面に配置し、 見た目 表示する で表示状態にしておくんだ。

    #14サムネイルの配置

    step-13

    サムネイルスプライトの位置とコスチュームを設定するよ。前のステップの 制御 ずっと ループの続きだ。

    動き x座標を ( ) 、y座標を ( ) にする でステージの中央(0, 0)に配置して、 見た目 コスチュームを ( ) にする でコスチュームを切り替えるよ。ずっとループで設定し続けることで、何があっても正しい状態が保たれるんだ。

    #15スタートボタンの準備

    [talk class="m-l-n"]ゲームを始めるためのスタートボタンを設定するよ。プレイヤーが最初に目にするUI要素だ。[/talk]

    準備

    スプライト「スタートボタン」を開く

    スタートボタンスタートボタン
    スプライトについて
    ゲーム開始ボタン。クリックでコスチュームが切り替わり、2回目クリックでゲームスタート
    どんな役割か
    ゲームを始めるためのスタートボタンを作るよ。クリックするとボタンの見た目が変わって、もう一度クリックするとゲームが始まるよ。

    実装

    step-14

    見た目 ( ) へ移動する で最前面に配置して、 見た目 コスチュームを ( ) にする で初期状態のボタンに切り替えよう。 見た目 表示する で表示して、 見た目 ( ) の効果を ( ) にする でゴースト効果を0にすることで確実に見える状態にするよ。

    ゴースト効果を明示的に0にリセットしているのは、前回のゲームでフェードアウトした透明度が残らないようにするためだよ。

    #16最初のクリック

    [talk class="m-l-n"]スタートボタンの1回目のクリックを処理するよ。ボタンの見た目が変わって「もう一度押してね」と合図するんだ。[/talk] step-15

    イベント このスプライトが押されたとき でクリックを検知して、 制御 もし ( ) なら 見た目 コスチュームの ( ) のコスチューム番号が1(初期状態)かどうかを確認するよ。条件に合えば、 制御 ( ) まで待つ でマウスを離すのを待ってから 見た目 コスチュームを ( ) にする で2番目のコスチュームに切り替えるんだ。

    マウスを離すのを待つのは、1回のクリックで一気にゲームが始まるのを防ぐためだよ。プレイヤーに準備する時間を与えているんだね。

    #17ゲーム開始の合図

    [talk class="m-l-n"]2回目のクリックでいよいよゲームスタートだ。ボタンがフェードアウトして消えていく演出もつけるよ。[/talk]

    準備

    メッセージ「スタート」を追加

    メッセージ「スタート」を追加

    実装

    step-16

    イベント このスプライトが押されたとき でクリックを検知し、 制御 もし ( ) なら 見た目 コスチュームの ( ) のコスチューム番号が2かどうかを確認するよ。条件に合えば イベント ( ) を送る で「スタート」メッセージを全スプライトに送信するんだ。

    制御 ( ) 回繰り返す を10回実行して 見た目 ( ) の効果を ( ) ずつ変える でゴースト効果を10ずつ増やしていくよ。10回 × 10 = 100で完全に透明になるんだ。最後に 見た目 ( ) の効果を ( ) にする でゴースト効果を100にして確実に見えなくするよ。

    #18ゾンビの初期設定

    [talk class="m-l-n"]「スタート」メッセージを受け取ったら、ゾンビの準備を始めるよ。変数の初期化と表示設定をまとめて行うんだ。[/talk]

    準備

    スプライト「ゾンビ」を開く

    ゾンビ
    ゾンビ

    変数「★制限」を追加

    プレイヤーの操作可否を制御するフラグ(OK/STOP)

    変数「★制限」を追加

    変数「★X」を追加

    プレイヤーのX方向の速度

    変数「★X」を追加

    変数「★Y」を追加

    プレイヤーのY方向の速度

    変数「★Y」を追加

    実装

    step-17

    イベント ( ) を受け取ったとき で「スタート」を受信したら、まず 変数 ( ) を ( ) にする で「★制限」変数をSTOPに設定するよ。これでプレイヤーがまだ操作できない状態を作るんだ。 変数 変数 ( ) を隠す で「★X」「★Y」「★制限」の3つの変数表示を隠して、画面をすっきりさせるよ。

    #19ゾンビの登場

    [talk class="m-l-n"]ゾンビをステージの開始位置に配置して、いよいよ画面に登場させるよ。[/talk] step-18

    動き ( ) 度に向ける で向きを90度(右向き)にして、 動き x座標を ( ) 、y座標を ( ) にする でx座標-170、y座標-41の左下に配置するよ。 動き 回転方法を ( ) にする を「左右のみ」に設定すると、左を向いたときにキャラクターがひっくり返らずに水平反転だけするんだ。

    見た目 大きさを ( ) %にする でサイズを70%にして画面に収まる大きさにし、 見た目 表示する でついにゾンビが姿を現すよ。

    #20レベル表示の登場

    [talk class="m-l-n"]ゲームが始まったら、今どのステージにいるか分かるようにレベル進捗バーを表示するよ。[/talk]

    準備

    スプライト「レベル表示」を開く

    レベル表示
    レベル表示

    実装

    step-19

    イベント ( ) を受け取ったとき で「スタート」メッセージを受け取ったら、 見た目 ( ) へ移動する で最前面に配置して 見た目 表示する で表示しよう。ゾンビやステージの手前にレベル表示が来るから見やすいよ。

    #21入力待ち

    [talk class="m-l-n"]ゾンビが画面に出てきたけど、すぐには動かさないよ。プレイヤーが準備できるまで待つんだ。[/talk]

    準備

    スプライト「ゾンビ」を開く

    ゾンビ
    ゾンビ

    実装

    step-20

    変数 ( ) を ( ) にする で速度変数「★X」と「★Y」を0に初期化するよ。そして 制御 ( ) まで待つ で、上矢印キー・右矢印キー・左矢印キーのどれかが押されるか、マウスがクリックされるまで待機するんだ。

    プレイヤーが操作を始めたら 変数 ( ) を ( ) にする で「★制限」をOKに変更するよ。これが移動処理を許可するスイッチの役割を果たしているんだ。

    #22右への移動

    [talk class="m-l-n"]いよいよゾンビの移動ロジックを作っていくよ。まずは右方向の移動からだ。[/talk] step-21

    制御 ずっと でメインループを作り、 制御 もし ( ) なら で「★制限」がOKのときだけ処理を実行するよ。右矢印キーかDキーが押されているとき、またはマウスがゾンビより右側でクリックされているときに、 変数 ( ) を ( ) ずつ変える で「★X」を1.5増やすんだ。 動き ( ) 度に向ける で90度にしてゾンビを右向きにするよ。

    ここで大事なのは、座標を直接変えるのではなく「★X」変数に速度として値を溜めること。この変数が後の摩擦や衝突判定で活きてくるよ。

    #23左への移動

    [talk class="m-l-n"]右と同じ仕組みで、左方向の移動も作るよ。左矢印キーかAキーが押されているとき、またはマウスがゾンビより左側でクリックされているときに動くんだ。[/talk] step-22

    変数 ( ) を ( ) ずつ変える で「★X」を-1.5にすることで左方向の速度を加えるよ。 動き ( ) 度に向ける を-90度にしてゾンビを左向きにするんだ。左右のみの回転スタイルのおかげで、キャラクターが水平反転するだけで上下逆にはならないよ。

    #24摩擦で滑らかに止まる

    [talk class="m-l-n"]普通のゲームではキーを離すと即座に止まるけど、この作品はもっとリアルな動きを目指しているんだ。「★X」変数に摩擦をかけて、じわっと減速させるよ。[/talk] step-23

    変数 ( ) を ( ) にする で「★X」を「★X × 0.8」にするよ。毎フレーム速度が80%に減っていくから、キーを離した後もしばらく滑ってから止まるんだ。そして 動き x座標を ( ) ずつ変える で「★X」の値だけ実際に移動させるよ。

    この「速度変数 × 減衰率」が摩擦の正体だよ。0.8を0.5にすると一気に減速するし、0.95にするとツルツルの氷の上を滑るような感覚になる。直接座標を変えるシンプルな移動と比べて、この方法だと操作感が格段にリアルになるんだ。

    #25段差を登る(前半)

    [talk class="m-l-n"]ゾンビが左右に移動したとき、地面にめり込んでいたら少しずつ上に押し出す仕組みを作るよ。これがプラットフォーマーの「段差登り」テクニックだ。[/talk] step-24

    制御 もし ( ) なら 調べる ( ) に触れた を使い、地面に触れているかチェックするよ。触れていたら 動き y座標を ( ) ずつ変える で1ピクセル上に動かすんだ。まだ触れていたらもう1ピクセル上に。この判定を入れ子(ネスト)にして段階的に試行するのがポイントだよ。

    1ピクセルの段差なら1回で抜け出せるし、2ピクセルの段差なら2回で抜け出せる。こうすることで小さな段差は自動的に登れるようになるんだ。

    #26段差を登る(後半)

    [talk class="m-l-n"]前のステップに続けて、さらに深い段差にも対応するよ。合計で4段階のネスト判定を行うんだ。[/talk] step-25

    3回目、4回目の 制御 もし ( ) なら 動き y座標を ( ) ずつ変える を追加して、最大4ピクセルまでの段差に対応させるよ。5回目の 調べる ( ) に触れた チェックで、4ピクセル上に動かしてもまだ地面から抜け出せなかった場合は「壁にぶつかった」と判断するんだ。

    普通のプラットフォーマーでは衝突したら1回だけ戻すシンプルな処理が多いけど、この作品では段階的に試行することで、4ピクセル以下の段差を自動で登れるんだ。プレイヤーが小さな凸凹で引っかからない、快適な操作感の秘密だよ。

    #27壁の衝突と壁ジャンプ

    [talk class="m-l-n"]4ピクセル上に動かしても地面から抜け出せなかったら、壁にぶつかったということだ。ここから壁ジャンプの処理が始まるよ。[/talk] step-26

    まず 動き x座標を ( ) ずつ変える で「★X × -1」として水平移動を巻き戻し、 動き y座標を ( ) ずつ変える で-4して垂直方向も元に戻すよ。そして 制御 もし ( ) ならでなければ で上矢印キーかWキーが押されているかをチェックするんだ。

    ジャンプ入力があれば壁ジャンプ発動だ。 制御 もし ( ) ならでなければ で「★X」が0より大きいか(右に進んでいたか)を見て、右なら 変数 ( ) を ( ) にする で「★X」を-12にして左に跳ね返し、 ( ) の音を鳴らす でDrumの効果音を鳴らすよ。

    #28壁ジャンプの完成

    [talk class="m-l-n"]壁ジャンプの残りの処理を完成させるよ。左に進んでいた場合の分岐と、ジャンプしない場合の処理だ。[/talk] step-27

    左に進んでいた場合は 変数 ( ) を ( ) にする で「★X」を12にして右に跳ね返し、同じくDrumの効果音を鳴らすよ。壁ジャンプ時には 変数 ( ) を ( ) にする で「★Y」を10にして上向きの力を与えるんだ。

    ジャンプ入力がない場合は壁に当たっただけだから、 変数 ( ) を ( ) にする で「★X」を0にして水平速度をゼロにするよ。壁にぶつかったら止まる、ジャンプキーを押していたら壁を蹴って反対方向に飛ぶ――これが壁ジャンプの仕組みだよ。

    #29重力の実装

    [talk class="m-l-n"]キャラクターが空中にいるとき、下に引っ張る力が必要だよね。重力を実装しよう。[/talk] step-28

    変数 ( ) を ( ) ずつ変える で「★Y」を-0.9ずつ減らすことで、毎フレーム落下速度が増していくよ。そして 動き y座標を ( ) ずつ変える で「★Y」の値だけ実際にY座標を変えるんだ。

    「★Y」が正の値ならゾンビは上に動き(ジャンプ中)、負の値なら下に動く(落下中)よ。-0.9ずつ減っていくから、ジャンプした後にだんだん減速して頂点に達し、そこから加速しながら落ちていく自然な放物線が生まれるんだ。

    #30着地判定

    [talk class="m-l-n"]落下して地面にめり込んだら、ゾンビを地面の上に押し戻す処理が必要だよ。[/talk] step-29

    制御 もし ( ) なら 調べる ( ) に触れた を使い地面との接触を検知するよ。触れていたら 動き y座標を ( ) ずつ変える で「★Y × -1」だけ動かして、めり込んだ分を巻き戻すんだ。最後に 変数 ( ) を ( ) にする で「★Y」を0にして落下速度をリセットするよ。

    この「落とす → めり込んだら戻す → 速度リセット」はプラットフォーマーの定石だよ。重力で落下させて、地面にめり込んだ瞬間に反対方向に同じだけ動かすことで、ゾンビがちょうど地面の表面に立つ形になるんだ。

    #31ジャンプと重力

    [talk class="m-l-n"]ゾンビにジャンプと重力の仕組みを追加するよ。上キーやWキーを押すと空中に飛び上がって、離すと自然に落ちてくるようになるんだ。[/talk] step-30

    動き y座標を ( ) ずつ変える で1ピクセル下に動かして地面が近いかチェックし、 調べる ( ) に触れた で地面に触れているかつジャンプ入力があったら、 変数 ( ) を ( ) ずつ変える で「★Y」に13を加えて上向きの力を与えるよ。 ( ) の音を鳴らす でジャンプ音も鳴らすんだ。

    チェックが終わったら 動き y座標を ( ) ずつ変える で1ピクセル戻すよ。この「1px下に動かして確認→元に戻す」というのは、地面との距離を調べるための探り(プローブ)なんだ。実際の移動は「★Y」変数の速度で別に処理されるよ。

    #32BGMと表示優先

    [talk class="m-l-n"]ゲームの雰囲気を盛り上げるBGMと、ゾンビが常に最前面に表示される仕組みを作るよ。[/talk]

    準備

    変数「★状態」を追加

    昼夜サイクルの状態フラグ。1で朝のダメージゾーンが有効、0で無効

    変数「★状態」を追加

    実装

    step-31

    変数 ( ) を ( ) にする で「★状態」を0に初期化して、 音量を ( ) %にする で音量を100にセットするよ。 制御 ずっと の中で 見た目 ( ) へ移動する を毎フレーム実行して常に最前面を保ちつつ、 終わるまで ( ) の音を鳴らす でBGMをループ再生するんだ。

    「終わるまで再生する」ブロックは曲が終わるまで次の処理に進まないから、ずっとループの中に入れるだけで自動的にBGMがリピート再生されるよ。

    #33ステージクリア判定

    [talk class="m-l-n"]ゾンビが画面の右端まで到達したら次のステージに進む仕組みを作るよ。[/talk]

    準備

    メッセージ「次!」を追加

    メッセージ「次!」を追加

    実装

    step-32

    制御 ずっと で常にX座標を監視して、 演算 ( ) < ( ) で240を超えたかチェックするんだ。超えていたら イベント ( ) を送る で「次!」メッセージを全スプライトに送信するよ。240はScratchの画面右端の座標だから、ここを超えたらステージの端まで到達したということだね。

    #34レベルリセット

    [talk class="m-l-n"]「次!」メッセージを受け取ったら、ゾンビをスタート地点に戻す処理を作るよ。[/talk] step-33

    イベント ( ) を受け取ったとき で「次!」を受信したら、 動き x座標を ( ) 、y座標を ( ) にする でX=-170、Y=-41のスタート位置にワープさせて、 変数 ( ) を ( ) にする で「★制限」を「OK」に戻すよ。これで新しいステージで操作を再開できるんだ。

    #35背景の切り替え

    [talk class="m-l-n"]ステージが進むたびに背景も切り替わるようにするよ。[/talk]

    準備

    スプライト「stage」を開く

    ステージ

    実装

    step-34

    ステージの イベント ( ) を受け取ったとき で「次!」を受信したら、 見た目 次の背景 で次の背景に切り替えるだけ。シンプルだけど、これでステージごとに違う風景が楽しめるようになるんだ。

    #36地形の切り替え

    [talk class="m-l-n"]地面スプライトも「次!」メッセージでコスチュームを切り替えるよ。[/talk]

    準備

    スプライト「地面」を開く

    地面
    地面

    実装

    step-35

    イベント ( ) を受け取ったとき で「次!」を受信したら 見た目 次のコスチュームにする を実行するだけ。各コスチュームに異なるステージの地形が描かれているから、切り替えるだけで地形がガラッと変わるんだ。

    #37障害物の切り替え

    [talk class="m-l-n"]障害物スプライトもステージ進行に合わせて切り替えるよ。[/talk]

    準備

    スプライト「障害物」を開く

    障害物
    障害物

    実装

    step-36

    イベント ( ) を受け取ったとき で「次!」を受信したら、 見た目 ( ) へ移動する で最背面に移動してから 見た目 次のコスチュームにする で次の配置パターンに切り替えるよ。最背面に置くのは、障害物がゾンビや地面の手前に出てきてしまうのを防ぐためだよ。

    #38ゴールエリアの切り替え

    [talk class="m-l-n"]ゴールトリガーもステージごとに配置が変わるよ。[/talk]

    準備

    スプライト「ゴールトリガー」を開く

    ゴールトリガー
    ゴールトリガー

    実装

    step-37

    同じように イベント ( ) を受け取ったとき で「次!」を受信して 見た目 次のコスチュームにする するんだ。ステージごとにゴールの位置が異なるから、コスチュームで配置を管理しているんだよ。

    #39月の切り替え

    [talk class="m-l-n"]月スプライトもステージに合わせて見た目を変えるよ。[/talk]

    準備

    スプライト「月」を開く

    月

    実装

    step-38

    イベント ( ) を受け取ったとき で「次!」を受信して 見た目 次のコスチュームにする を実行するよ。ステージごとに月の見え方が変わって、夜空の演出がステージの雰囲気に合うようになるんだ。

    #40レベル表示の更新

    [talk class="m-l-n"]今どのステージにいるか分かるように、レベル進捗の表示を更新するよ。[/talk]

    準備

    スプライト「レベル表示」を開く

    レベル表示
    レベル表示

    実装

    step-39

    イベント ( ) を受け取ったとき で「次!」を受信したら、 見た目 表示する で表示して 見た目 次のコスチュームにする でコスチュームを進めるよ。コスチュームにステージ番号が描かれているから、切り替えるだけで進捗が更新されるんだ。

    この作品ではたった1つの「次!」メッセージで、地面・障害物・ゴール・月・背景・レベル表示の6つのスプライトが一斉に切り替わるんだ。各スプライトがコスチューム番号でステージデータを持っているから、コスチュームの数だけステージを増やせるよ。

    #41障害物ダメージ(前半)

    [talk class="m-l-n"]溶岩や障害物に触れたらダメージを受ける仕組みを作るよ。まずは当たり判定と見た目の変化からだね。[/talk]

    準備

    スプライト「ゾンビ」を開く

    ゾンビ
    ゾンビ

    実装

    step-40

    制御 ずっと で常に監視して、 調べる ( ) に触れた で障害物に触れたかチェックするよ。触れていたら 見た目 コスチュームを ( ) にする で「ゾンビダメージ」コスチュームに切り替えて、 ( ) の音を鳴らす で「やられた」効果音を鳴らすんだ。

    #42障害物ダメージ(後半)

    [talk class="m-l-n"]ダメージを受けた後、ゾンビをスタート地点に戻して復帰させる処理を完成させるよ。[/talk] step-41

    まず 変数 ( ) を ( ) にする で「★制限」を「STOP」にして操作を一時停止するよ。次に 動き x座標を ( ) 、y座標を ( ) にする でスタート地点(X=-170, Y=-41)に戻してから「★制限」を「OK」に戻すんだ。 制御 ( ) 秒待つ で0.1秒待ってから 見た目 コスチュームを ( ) にする で通常の「ゾンビ」コスチュームに戻すよ。

    「★制限」を「STOP」にしている間はゾンビの移動処理が止まるから、ワープ中に勝手に動いてしまうのを防いでいるんだ。変数をフラグとして使う、ゲーム開発の定番テクニックだよ。

    #43昼夜サイクル(前半)

    [talk class="m-l-n"]ステージによっては朝・昼・夜と時間が変化する仕組みを作るよ。背景の名前を条件にして昼夜サイクルを制御するんだ。[/talk]

    準備

    スプライト「stage」を開く

    ステージ

    実装

    step-42

    イベント ( ) を受け取ったとき で「次!」を受信したら、 制御 もし ( ) なら 演算 ( ) = ( ) で背景名が「朝」かどうかチェックするよ。朝の背景になったら 変数 ( ) を ( ) にする で「★状態」を1にセットして、 制御 ( ) 秒待つ で10秒待つんだ。

    「★状態」が1になると特定のエリアにダメージゾーンが発動するよ。背景名で時間帯を判定するのが、この作品ならではの工夫だね。

    #44昼夜サイクル(後半)

    [talk class="m-l-n"]朝の10秒後に昼、さらに10秒後に夜へと切り替わる処理を完成させるよ。[/talk] step-43

    10秒待った後、 見た目 背景を ( ) にする で「昼」に切り替えて、さらに 制御 ( ) 秒待つ で10秒待ってから「夜」に切り替えるんだ。最後に 変数 ( ) を ( ) にする で「★状態」を0に戻すよ。

    「★状態」が0に戻るとダメージゾーンが無効になるから、夜になれば安全に通れるようになるんだ。時間制限のあるエリアを作ることで、プレイヤーに緊張感を与えているよ。

    #45朝のダメージゾーン(前半)

    [talk class="m-l-n"]「★状態」が1の朝の時間帯に、特定エリアでダメージを受ける仕組みを作るよ。[/talk]

    準備

    スプライト「ゾンビ」を開く

    ゾンビ
    ゾンビ

    実装

    step-44

    制御 ずっと で監視して、 制御 もし ( ) なら の条件に 演算 ( ) かつ ( ) を使うよ。「★状態」が1かつX座標が特定の位置にいる場合にダメージが発生するんだ。ダメージ時は 見た目 コスチュームを ( ) にする で「ゾンビダメージ」に切り替えて ( ) の音を鳴らす で効果音を鳴らすよ。

    昼夜サイクルとプレイヤーの位置という2つの条件を組み合わせることで、時間帯によって危険なエリアが変わるゲーム性を生み出しているんだ。

    #46朝のダメージゾーン(後半)

    [talk class="m-l-n"]朝のダメージを受けた後の復帰処理を完成させるよ。障害物ダメージと同じパターンだね。[/talk] step-45

    見た目 ( ) へ移動する で最前面に移動してから、「★制限」を「STOP」にしてスタート地点にワープ、「★制限」を「OK」に戻して 見た目 コスチュームを ( ) にする で通常の「ゾンビ」コスチュームに戻す流れだよ。

    どんな種類のダメージでも同じ復帰パターンを使っているのがポイントだよ。コードの一貫性が保たれるし、後から新しいダメージ源を追加するときも同じ方法で対応できるんだ。

    #47ゴール検出

    [talk class="m-l-n"]最終ゴールに到達したことを検出する仕組みを作るよ。[/talk]

    準備

    メッセージ「ゴール」を追加

    メッセージ「ゴール」を追加

    実装

    step-46

    制御 ずっと で常に監視して、 調べる ( ) に触れた でゴールトリガーに触れたかチェックするよ。触れたら イベント ( ) を送る で「ゴール」メッセージを送信して、 変数 ( ) を ( ) にする で「★制限」を「STOP」にしてゾンビの動きを止めるんだ。

    「ゴール」メッセージを受け取った各スプライトが、これからクリア演出を担当するよ。

    #48ゴールエリアの非表示

    [talk class="m-l-n"]ゴールしたらゴールトリガーを画面から消すよ。[/talk]

    準備

    スプライト「ゴールトリガー」を開く

    ゴールトリガー
    ゴールトリガー

    実装

    step-47

    イベント ( ) を受け取ったとき で「ゴール」を受信したら 見た目 隠す で隠すだけ。クリア演出の最中にゴールエリアが見えていたら不自然だからね。

    #49BGMの消音

    [talk class="m-l-n"]ゴール時にBGMをフェードアウトさせて、クリア演出の音楽に切り替える準備をするよ。[/talk]

    準備

    スプライト「ゾンビ」を開く

    ゾンビ
    ゾンビ

    実装

    step-48

    イベント ( ) を受け取ったとき で「ゴール」を受信したら、 音量を ( ) %にする で音量を0にするんだ。BGMのループ再生を止めるのではなく音量を0にしているから、音楽の仕組み自体は壊さずに静かにできるんだよ。

    #50ゴールエフェクト開始

    [talk class="m-l-n"]ゴール時のお祝いアニメーションを作り始めるよ。キラキラ光りながら画面中央に集まってくる華やかなエフェクトだよ。[/talk]

    準備

    スプライト「ゴールエフェクト」を開く

    ゴールエフェクト
    ゴールエフェクト

    実装

    step-49

    イベント ( ) を受け取ったとき で「ゴール」を受信したら、 制御 ( ) 秒待つ で0.1秒だけ待ってからアニメーションを開始するよ。 制御 ずっと ループの中で 見た目 ( ) へ移動する で最前面に表示して、 見た目 大きさを ( ) %にする でサイズを100%にリセットするんだ。0.1秒の待機は他のスプライトが先に準備を終えるための間だよ。

    #51エフェクトの初期配置

    [talk class="m-l-n"]ゴールエフェクトの開始位置と見た目を設定するよ。[/talk] step-50

    見た目 表示する で表示して、 制御 もし ( ) なら でコスチューム番号が1か2かチェックするよ。該当したら 動き x座標を ( ) 、y座標を ( ) にする で(-40, 0)に配置して、 見た目 ( ) の効果を ( ) にする で明るさを100にするんだ。明るさ100は真っ白の状態で、ここから徐々に元の色に戻していくよ。

    #52減衰アニメーション準備

    [talk class="m-l-n"]エフェクトの動きを制御するための変数を初期化して、最初のアニメーションループに入るよ。[/talk]

    準備

    変数「★縦」を追加

    ゴールエフェクトのX方向の移動速度(指数減衰用)

    変数「★縦」を追加

    変数「★横」を追加

    ゴールエフェクトのY方向の移動速度(指数減衰用)

    変数「★横」を追加

    実装

    step-51

    変数 ( ) を ( ) にする で「★縦」を35、「★横」を20にセットするよ。これがエフェクトの初速になるんだ。 制御 ( ) 回繰り返す で10回繰り返しながら、 見た目 ( ) の効果を ( ) ずつ変える で明るさを-10ずつ下げていくよ。10回×-10で明るさが100から0に戻って、真っ白から元の色にフェードインするんだ。

    #53指数減衰で中央へ

    [talk class="m-l-n"]ここがゴールエフェクトの核心部分だよ。指数減衰という数学的なテクニックで、エフェクトを画面中央に向かって自然に収束させるんだ。[/talk] step-52

    見た目 大きさを ( ) ずつ変える で(130-現在のサイズ)÷5ずつサイズを変化させるよ。目標値との差を割ることで、最初は大きく変化して徐々に落ち着く動きになるんだ。「★縦」も同じ原理で、現在値×0.75に(0-X座標)÷8.5を足して更新するよ。0.75倍で速度を減衰させつつ、中央(0, 0)との距離で補正をかけているんだ。

    この「現在値×減衰率+目標への補正」という計算はイージングの基本形で、固定速度の移動では出せないバウンスしながら収まっていく自然な動きが生まれるんだよ。

    #54収束アニメーション

    [talk class="m-l-n"]2つ目のアニメーションループで、エフェクトを最終サイズに落ち着かせるよ。[/talk] step-53

    制御 ( ) 回繰り返す で20回繰り返しながら、今度は目標サイズを100%にして同じ減衰計算を続けるんだ。「★縦」と「★横」の計算は前のステップとほぼ同じだけど、Y方向の補正の割る数が7から5に変わっていて、より強く中央に引き寄せられるよ。

    2段階に分けている理由は、最初の10回で勢いよく飛び出して大きくなり、次の20回でゆっくり正しい位置に収まるという緩急をつけるためだよ。

    #55エフェクトの繰り返し

    [talk class="m-l-n"]2つ目のループ内の移動処理と、アニメーション全体の間隔を設定するよ。[/talk] step-54

    動き x座標を ( ) ずつ変える 動き y座標を ( ) ずつ変える で「★縦」と「★横」の分だけ移動させるよ。ループが終わったら 制御 ( ) 秒待つ で2秒待ってから 制御 ずっと の先頭に戻って再びアニメーションが始まるんだ。2秒の間があることで、キラキラが波のように繰り返されるよ。

    #56勝利のBGM

    [talk class="m-l-n"]ゴールしたらお祝いの音楽を流すよ。[/talk]

    準備

    スプライト「サムネ」を開く

    サムネ
    サムネ

    実装

    step-55

    イベント ( ) を受け取ったとき で「ゴール」を受信したら、 制御 ずっと ループの中で 終わるまで ( ) の音を鳴らす を使って「勝利の曲」をリピート再生するよ。ゾンビのBGMは音量0になっているから、勝利の音楽だけが聞こえるんだ。

    まとめ

    ゲームの基本的な仕組みはすべて完成したよ。変数で速度を管理する物理演算、段階的な衝突判定による壁登り、ブロードキャストで10スプライトを一斉に制御するステージ進行――今回学んだパターンはプラットフォーマーゲームの定番テクニックだよ。次の記事ではズルを防ぐターボモード検出機能を追加して完成させよう!

    ブクマよろしくお願いします!という口コミを寄せてくれた方 ブクマよろしくお願いします!
    どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!