- ① 物理演算・壁ジャンプ (いまここ)
- ② チート対策
さぁ、スクラッチでナニ作る!?
チュートリアルの元になった作品
マインクラフト風の横スクロールプラットフォーマーゲーム。ゾンビ親子を操作して溶岩や障害物を避けながらステージを進み、ゴールを目指す。griffpatch式の壁登り・壁ジャンプ、昼夜サイクルによるダメージゾーン、sin波による月の脈動アニメーション、ゴールセレブレーション演出など多彩な仕組みを持つ
今回の目標
- 矢印キーやマウスで左右移動・ジャンプができる、マイクラ風ゾンビキャラクターを作る
- 4段階ネストの壁登り・壁ジャンプと重力演算による本格的な物理移動を実装する
- 溶岩ダメージ・昼夜サイクル・ゴールセレブレーション演出を持つ11ステージのゲームを完成させる
スターター作品をリミックスしよう
このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
スターター作品をダウンロード
#1背景の初期化
準備
スプライト「stage」を開く
| スプライトについて |
|---|
| 背景管理。初期背景の設定、ステージ進行時の背景切替、昼夜サイクルの制御を行う |
実装
が押されたとき で旗が押されたら、 背景を ( ) にする で「背景1」に切り替えよう。これがゲームの出発点になるよ。
#2地面の準備
準備
スプライト「地面」を開く
| スプライトについて |
|---|
| ステージごとの地形を表現するスプライト。コスチュームでステージの地形が切り替わる |
| どんな役割か |
| マインクラフト風のステージ地形を作るよ。コスチュームを切り替えるだけで次のステージの地形になるんだ。 |
実装
( ) へ移動する で最背面に配置して、キャラクターや障害物の後ろに表示されるようにしよう。 コスチュームを ( ) にする でステージ1の地形コスチュームに切り替えるよ。
#3地面の位置固定
地面をステージ上の正しい位置に固定するよ。 ずっと ループの中で x座標を ( ) 、y座標を ( ) にする を使い、x座標36、y座標29に置き続けるんだ。
ずっと で位置を固定し続けているのは、他の処理で地面がずれても自動で戻るようにするためだよ。
#4障害物の初期化
準備
スプライト「障害物」を開く
| スプライトについて |
|---|
| 溶岩やトラップの障害物。触れるとダメージを受けてスタート地点に戻される |
| どんな役割か |
| 溶岩や障害物を作るよ。ゾンビが触れるとダメージを受けてスタート地点に戻されるんだ。ステージごとに配置が変わるよ。 |
実装
が押されたとき で旗が押されたら、 コスチュームを ( ) にする でlavaコスチュームに切り替えよう。このコスチュームがステージ1の溶岩配置を決めているんだ。
#5ゴールエリアの設定
準備
スプライト「ゴールトリガー」を開く
| スプライトについて |
|---|
| 各ステージのゴール判定エリア。プレイヤーが触れるとゴールメッセージを送信する |
| どんな役割か |
| 各ステージのゴール地点を作るよ。ゾンビがここに触れるとステージクリアになるんだ。最終ゴールに触れるとクリア演出が始まるよ。 |
実装
表示する で表示して、 コスチュームを ( ) にする でlavaコスチュームに切り替えるよ。障害物と同じく、コスチュームでステージごとに配置が変わる仕組みなんだ。
#6ゴールの重ね順
ゴールトリガーを最前面に配置するよ。 ( ) へ移動する で前面に持ってくることで、他のスプライトの上に重なるようにするんだ。
レイヤーの順番はScratchのゲーム作りで大事なポイントだよ。当たり判定用のスプライトが他の絵の後ろに隠れてしまうと、触れているのに反応しないバグの原因になるんだ。
#7月の表示
準備
スプライト「月」を開く
| スプライトについて |
|---|
| 夜空に浮かぶ月の装飾スプライト。sin関数でサイズが脈動するアニメーション付き |
| どんな役割か |
| 夜空に浮かぶ月を作るよ。sin関数を使って大きさがゆらゆら変わる脈動アニメーションをつけるんだ。数学を使ったアニメーションの基本を学べるよ。 |
実装
コスチュームを ( ) にする でステージ1に対応するコスチュームに切り替えて、 表示する で画面に表示しよう。月はステージが進むとコスチュームが切り替わって見た目が変わるよ。
#8月の脈動アニメーション
準備
変数「★大きさ」を追加
sin関数の角度入力に使うカウンター。脈動アニメーションの進行を制御する
実装
まず 変数 ( ) を隠す で「★大きさ」変数の表示を隠すよ。 ずっと の中で ( ) を ( ) ずつ変える を使って「★大きさ」を1ずつ増やし続けるんだ。そして 大きさを ( ) %にする で、sin(★大きさ × 5) × 10 + 100という計算でサイズを設定するよ。
この式を分解すると、sin(★大きさ × 5)の部分が-1から1の間で波打つ値を生み出して、×10で振れ幅を±10%に、+100で基準サイズを100%にしているんだ。つまり月は90%〜110%の間でゆっくり膨らんだり縮んだりするよ。×5の値を大きくすると速く脈動するよ。
#9ゾンビを隠す
準備
スプライト「ゾンビ」を開く
| スプライトについて |
|---|
| プレイヤーキャラクター。左右移動、ジャンプ、壁登り、ダメージ処理、BGM再生を担当 |
| どんな役割か |
| ゾンビを操作してステージを進むプラットフォーマーの主人公を作るよ。矢印キーやマウスで左右移動とジャンプができて、壁にぶつかると自動で登れるようにするよ。 |
実装
が押されたとき で旗が押されたら、 隠す でゾンビを非表示にしよう。ゲームが始まる前にプレイヤーキャラが見えていたら変だもんね。
#10ゾンビのコスチューム
が押されたとき で旗が押されたら、 コスチュームを ( ) にする で「ゾンビ」コスチュームに切り替えよう。ダメージコスチュームのまま次のゲームが始まらないように、毎回リセットしているんだ。
#11レベル表示の準備
準備
スプライト「レベル表示」を開く
| スプライトについて |
|---|
| 現在のステージ進捗を表示するスプライト。ステージ進行に合わせてコスチュームが切り替わる |
| どんな役割か |
| 今どのステージにいるか表示するレベル進捗バーを作るよ。ステージが進むたびに表示が更新されるよ。 |
実装
コスチュームを ( ) にする でステージ1のコスチュームに切り替えて、 隠す で非表示にしよう。スタートボタンが押されたら表示する仕組みだよ。
#12ゴールエフェクトの準備
準備
スプライト「ゴールエフェクト」を開く
| スプライトについて |
|---|
| ゴール時の祝福アニメーションスプライト。明滅と指数減衰移動でセレブレーション演出を行う |
| どんな役割か |
| ゴールした時のお祝いエフェクトを作るよ。キラキラ光りながら画面中央に集まってくるアニメーションで、指数減衰という数学的なテクニックを使うよ。 |
実装
隠す で非表示にして、 コスチュームを ( ) にする で ( ) から ( ) までの乱数 を使い1か2のコスチュームをランダムに選ぶよ。クリアするたびに違うエフェクトが出るようにしているんだ。
#13サムネイルの透明化
準備
スプライト「サムネ」を開く
| スプライトについて |
|---|
| サムネイルオーバーレイ(GHOST100%で非表示)とゴール時の勝利BGM再生を担当 |
| どんな役割か |
| サムネイル画像の表示とゴール時の勝利BGMを再生するスプライトだよ。ゲーム中は透明で見えないけど、ゴールすると勝利の音楽が流れるよ。 |
実装
ずっと の中で ( ) の効果を ( ) にする のゴースト効果を100にして完全に透明にするよ。 ( ) へ移動する で最前面に配置し、 表示する で表示状態にしておくんだ。
#14サムネイルの配置
サムネイルスプライトの位置とコスチュームを設定するよ。前のステップの ずっと ループの続きだ。
x座標を ( ) 、y座標を ( ) にする でステージの中央(0, 0)に配置して、 コスチュームを ( ) にする でコスチュームを切り替えるよ。ずっとループで設定し続けることで、何があっても正しい状態が保たれるんだ。
#15スタートボタンの準備
準備
スプライト「スタートボタン」を開く
| スプライトについて |
|---|
| ゲーム開始ボタン。クリックでコスチュームが切り替わり、2回目クリックでゲームスタート |
| どんな役割か |
| ゲームを始めるためのスタートボタンを作るよ。クリックするとボタンの見た目が変わって、もう一度クリックするとゲームが始まるよ。 |
実装
( ) へ移動する で最前面に配置して、 コスチュームを ( ) にする で初期状態のボタンに切り替えよう。 表示する で表示して、 ( ) の効果を ( ) にする でゴースト効果を0にすることで確実に見える状態にするよ。
ゴースト効果を明示的に0にリセットしているのは、前回のゲームでフェードアウトした透明度が残らないようにするためだよ。
#16最初のクリック
このスプライトが押されたとき でクリックを検知して、 もし ( ) なら で のコスチューム番号が1(初期状態)かどうかを確認するよ。条件に合えば、 ( ) まで待つ でマウスを離すのを待ってから コスチュームを ( ) にする で2番目のコスチュームに切り替えるんだ。
マウスを離すのを待つのは、1回のクリックで一気にゲームが始まるのを防ぐためだよ。プレイヤーに準備する時間を与えているんだね。
#17ゲーム開始の合図
準備
メッセージ「スタート」を追加
実装
このスプライトが押されたとき でクリックを検知し、 もし ( ) なら で のコスチューム番号が2かどうかを確認するよ。条件に合えば ( ) を送る で「スタート」メッセージを全スプライトに送信するんだ。
( ) 回繰り返す を10回実行して ( ) の効果を ( ) ずつ変える でゴースト効果を10ずつ増やしていくよ。10回 × 10 = 100で完全に透明になるんだ。最後に ( ) の効果を ( ) にする でゴースト効果を100にして確実に見えなくするよ。
#18ゾンビの初期設定
準備
スプライト「ゾンビ」を開く
変数「★制限」を追加
プレイヤーの操作可否を制御するフラグ(OK/STOP)
変数「★X」を追加
プレイヤーのX方向の速度
変数「★Y」を追加
プレイヤーのY方向の速度
実装
( ) を受け取ったとき で「スタート」を受信したら、まず ( ) を ( ) にする で「★制限」変数をSTOPに設定するよ。これでプレイヤーがまだ操作できない状態を作るんだ。 変数 ( ) を隠す で「★X」「★Y」「★制限」の3つの変数表示を隠して、画面をすっきりさせるよ。
#19ゾンビの登場
( ) 度に向ける で向きを90度(右向き)にして、 x座標を ( ) 、y座標を ( ) にする でx座標-170、y座標-41の左下に配置するよ。 回転方法を ( ) にする を「左右のみ」に設定すると、左を向いたときにキャラクターがひっくり返らずに水平反転だけするんだ。
大きさを ( ) %にする でサイズを70%にして画面に収まる大きさにし、 表示する でついにゾンビが姿を現すよ。
#20レベル表示の登場
準備
スプライト「レベル表示」を開く
実装
( ) を受け取ったとき で「スタート」メッセージを受け取ったら、 ( ) へ移動する で最前面に配置して 表示する で表示しよう。ゾンビやステージの手前にレベル表示が来るから見やすいよ。
#21入力待ち
準備
スプライト「ゾンビ」を開く
実装
( ) を ( ) にする で速度変数「★X」と「★Y」を0に初期化するよ。そして ( ) まで待つ で、上矢印キー・右矢印キー・左矢印キーのどれかが押されるか、マウスがクリックされるまで待機するんだ。
プレイヤーが操作を始めたら ( ) を ( ) にする で「★制限」をOKに変更するよ。これが移動処理を許可するスイッチの役割を果たしているんだ。
#22右への移動
ずっと でメインループを作り、 もし ( ) なら で「★制限」がOKのときだけ処理を実行するよ。右矢印キーかDキーが押されているとき、またはマウスがゾンビより右側でクリックされているときに、 ( ) を ( ) ずつ変える で「★X」を1.5増やすんだ。 ( ) 度に向ける で90度にしてゾンビを右向きにするよ。
ここで大事なのは、座標を直接変えるのではなく「★X」変数に速度として値を溜めること。この変数が後の摩擦や衝突判定で活きてくるよ。
#23左への移動
( ) を ( ) ずつ変える で「★X」を-1.5にすることで左方向の速度を加えるよ。 ( ) 度に向ける を-90度にしてゾンビを左向きにするんだ。左右のみの回転スタイルのおかげで、キャラクターが水平反転するだけで上下逆にはならないよ。
#24摩擦で滑らかに止まる
( ) を ( ) にする で「★X」を「★X × 0.8」にするよ。毎フレーム速度が80%に減っていくから、キーを離した後もしばらく滑ってから止まるんだ。そして x座標を ( ) ずつ変える で「★X」の値だけ実際に移動させるよ。
この「速度変数 × 減衰率」が摩擦の正体だよ。0.8を0.5にすると一気に減速するし、0.95にするとツルツルの氷の上を滑るような感覚になる。直接座標を変えるシンプルな移動と比べて、この方法だと操作感が格段にリアルになるんだ。
#25段差を登る(前半)
もし ( ) なら で ( ) に触れた を使い、地面に触れているかチェックするよ。触れていたら y座標を ( ) ずつ変える で1ピクセル上に動かすんだ。まだ触れていたらもう1ピクセル上に。この判定を入れ子(ネスト)にして段階的に試行するのがポイントだよ。
1ピクセルの段差なら1回で抜け出せるし、2ピクセルの段差なら2回で抜け出せる。こうすることで小さな段差は自動的に登れるようになるんだ。
#26段差を登る(後半)
3回目、4回目の もし ( ) なら と y座標を ( ) ずつ変える を追加して、最大4ピクセルまでの段差に対応させるよ。5回目の ( ) に触れた チェックで、4ピクセル上に動かしてもまだ地面から抜け出せなかった場合は「壁にぶつかった」と判断するんだ。
普通のプラットフォーマーでは衝突したら1回だけ戻すシンプルな処理が多いけど、この作品では段階的に試行することで、4ピクセル以下の段差を自動で登れるんだ。プレイヤーが小さな凸凹で引っかからない、快適な操作感の秘密だよ。
#27壁の衝突と壁ジャンプ
まず x座標を ( ) ずつ変える で「★X × -1」として水平移動を巻き戻し、 y座標を ( ) ずつ変える で-4して垂直方向も元に戻すよ。そして もし ( ) ならでなければ で上矢印キーかWキーが押されているかをチェックするんだ。
ジャンプ入力があれば壁ジャンプ発動だ。 もし ( ) ならでなければ で「★X」が0より大きいか(右に進んでいたか)を見て、右なら ( ) を ( ) にする で「★X」を-12にして左に跳ね返し、 ( ) の音を鳴らす でDrumの効果音を鳴らすよ。
#28壁ジャンプの完成
左に進んでいた場合は ( ) を ( ) にする で「★X」を12にして右に跳ね返し、同じくDrumの効果音を鳴らすよ。壁ジャンプ時には ( ) を ( ) にする で「★Y」を10にして上向きの力を与えるんだ。
ジャンプ入力がない場合は壁に当たっただけだから、 ( ) を ( ) にする で「★X」を0にして水平速度をゼロにするよ。壁にぶつかったら止まる、ジャンプキーを押していたら壁を蹴って反対方向に飛ぶ――これが壁ジャンプの仕組みだよ。
#29重力の実装
( ) を ( ) ずつ変える で「★Y」を-0.9ずつ減らすことで、毎フレーム落下速度が増していくよ。そして y座標を ( ) ずつ変える で「★Y」の値だけ実際にY座標を変えるんだ。
「★Y」が正の値ならゾンビは上に動き(ジャンプ中)、負の値なら下に動く(落下中)よ。-0.9ずつ減っていくから、ジャンプした後にだんだん減速して頂点に達し、そこから加速しながら落ちていく自然な放物線が生まれるんだ。
#30着地判定
もし ( ) なら で ( ) に触れた を使い地面との接触を検知するよ。触れていたら y座標を ( ) ずつ変える で「★Y × -1」だけ動かして、めり込んだ分を巻き戻すんだ。最後に ( ) を ( ) にする で「★Y」を0にして落下速度をリセットするよ。
この「落とす → めり込んだら戻す → 速度リセット」はプラットフォーマーの定石だよ。重力で落下させて、地面にめり込んだ瞬間に反対方向に同じだけ動かすことで、ゾンビがちょうど地面の表面に立つ形になるんだ。
#31ジャンプと重力
y座標を ( ) ずつ変える で1ピクセル下に動かして地面が近いかチェックし、 ( ) に触れた で地面に触れているかつジャンプ入力があったら、 ( ) を ( ) ずつ変える で「★Y」に13を加えて上向きの力を与えるよ。 ( ) の音を鳴らす でジャンプ音も鳴らすんだ。
チェックが終わったら y座標を ( ) ずつ変える で1ピクセル戻すよ。この「1px下に動かして確認→元に戻す」というのは、地面との距離を調べるための探り(プローブ)なんだ。実際の移動は「★Y」変数の速度で別に処理されるよ。
#32BGMと表示優先
準備
変数「★状態」を追加
昼夜サイクルの状態フラグ。1で朝のダメージゾーンが有効、0で無効
実装
( ) を ( ) にする で「★状態」を0に初期化して、 音量を ( ) %にする で音量を100にセットするよ。 ずっと の中で ( ) へ移動する を毎フレーム実行して常に最前面を保ちつつ、 終わるまで ( ) の音を鳴らす でBGMをループ再生するんだ。
「終わるまで再生する」ブロックは曲が終わるまで次の処理に進まないから、ずっとループの中に入れるだけで自動的にBGMがリピート再生されるよ。
#33ステージクリア判定
準備
メッセージ「次!」を追加
実装
ずっと で常にX座標を監視して、 ( ) < ( ) で240を超えたかチェックするんだ。超えていたら ( ) を送る で「次!」メッセージを全スプライトに送信するよ。240はScratchの画面右端の座標だから、ここを超えたらステージの端まで到達したということだね。
#34レベルリセット
( ) を受け取ったとき で「次!」を受信したら、 x座標を ( ) 、y座標を ( ) にする でX=-170、Y=-41のスタート位置にワープさせて、 ( ) を ( ) にする で「★制限」を「OK」に戻すよ。これで新しいステージで操作を再開できるんだ。
#35背景の切り替え
準備
スプライト「stage」を開く
ステージ
実装
ステージの ( ) を受け取ったとき で「次!」を受信したら、 次の背景 で次の背景に切り替えるだけ。シンプルだけど、これでステージごとに違う風景が楽しめるようになるんだ。
#36地形の切り替え
準備
スプライト「地面」を開く
実装
( ) を受け取ったとき で「次!」を受信したら 次のコスチュームにする を実行するだけ。各コスチュームに異なるステージの地形が描かれているから、切り替えるだけで地形がガラッと変わるんだ。
#37障害物の切り替え
準備
スプライト「障害物」を開く
実装
( ) を受け取ったとき で「次!」を受信したら、 ( ) へ移動する で最背面に移動してから 次のコスチュームにする で次の配置パターンに切り替えるよ。最背面に置くのは、障害物がゾンビや地面の手前に出てきてしまうのを防ぐためだよ。
#38ゴールエリアの切り替え
準備
スプライト「ゴールトリガー」を開く
実装
同じように ( ) を受け取ったとき で「次!」を受信して 次のコスチュームにする するんだ。ステージごとにゴールの位置が異なるから、コスチュームで配置を管理しているんだよ。
#39月の切り替え
準備
スプライト「月」を開く
実装
( ) を受け取ったとき で「次!」を受信して 次のコスチュームにする を実行するよ。ステージごとに月の見え方が変わって、夜空の演出がステージの雰囲気に合うようになるんだ。
#40レベル表示の更新
準備
スプライト「レベル表示」を開く
実装
( ) を受け取ったとき で「次!」を受信したら、 表示する で表示して 次のコスチュームにする でコスチュームを進めるよ。コスチュームにステージ番号が描かれているから、切り替えるだけで進捗が更新されるんだ。
この作品ではたった1つの「次!」メッセージで、地面・障害物・ゴール・月・背景・レベル表示の6つのスプライトが一斉に切り替わるんだ。各スプライトがコスチューム番号でステージデータを持っているから、コスチュームの数だけステージを増やせるよ。
#41障害物ダメージ(前半)
準備
スプライト「ゾンビ」を開く
実装
ずっと で常に監視して、 ( ) に触れた で障害物に触れたかチェックするよ。触れていたら コスチュームを ( ) にする で「ゾンビダメージ」コスチュームに切り替えて、 ( ) の音を鳴らす で「やられた」効果音を鳴らすんだ。
#42障害物ダメージ(後半)
まず ( ) を ( ) にする で「★制限」を「STOP」にして操作を一時停止するよ。次に x座標を ( ) 、y座標を ( ) にする でスタート地点(X=-170, Y=-41)に戻してから「★制限」を「OK」に戻すんだ。 ( ) 秒待つ で0.1秒待ってから コスチュームを ( ) にする で通常の「ゾンビ」コスチュームに戻すよ。
「★制限」を「STOP」にしている間はゾンビの移動処理が止まるから、ワープ中に勝手に動いてしまうのを防いでいるんだ。変数をフラグとして使う、ゲーム開発の定番テクニックだよ。
#43昼夜サイクル(前半)
準備
スプライト「stage」を開く
ステージ
実装
( ) を受け取ったとき で「次!」を受信したら、 もし ( ) なら と ( ) = ( ) で背景名が「朝」かどうかチェックするよ。朝の背景になったら ( ) を ( ) にする で「★状態」を1にセットして、 ( ) 秒待つ で10秒待つんだ。
「★状態」が1になると特定のエリアにダメージゾーンが発動するよ。背景名で時間帯を判定するのが、この作品ならではの工夫だね。
#44昼夜サイクル(後半)
10秒待った後、 背景を ( ) にする で「昼」に切り替えて、さらに ( ) 秒待つ で10秒待ってから「夜」に切り替えるんだ。最後に ( ) を ( ) にする で「★状態」を0に戻すよ。
「★状態」が0に戻るとダメージゾーンが無効になるから、夜になれば安全に通れるようになるんだ。時間制限のあるエリアを作ることで、プレイヤーに緊張感を与えているよ。
#45朝のダメージゾーン(前半)
準備
スプライト「ゾンビ」を開く
実装
ずっと で監視して、 もし ( ) なら の条件に ( ) かつ ( ) を使うよ。「★状態」が1かつX座標が特定の位置にいる場合にダメージが発生するんだ。ダメージ時は コスチュームを ( ) にする で「ゾンビダメージ」に切り替えて ( ) の音を鳴らす で効果音を鳴らすよ。
昼夜サイクルとプレイヤーの位置という2つの条件を組み合わせることで、時間帯によって危険なエリアが変わるゲーム性を生み出しているんだ。
#46朝のダメージゾーン(後半)
( ) へ移動する で最前面に移動してから、「★制限」を「STOP」にしてスタート地点にワープ、「★制限」を「OK」に戻して コスチュームを ( ) にする で通常の「ゾンビ」コスチュームに戻す流れだよ。
どんな種類のダメージでも同じ復帰パターンを使っているのがポイントだよ。コードの一貫性が保たれるし、後から新しいダメージ源を追加するときも同じ方法で対応できるんだ。
#47ゴール検出
準備
メッセージ「ゴール」を追加
実装
ずっと で常に監視して、 ( ) に触れた でゴールトリガーに触れたかチェックするよ。触れたら ( ) を送る で「ゴール」メッセージを送信して、 ( ) を ( ) にする で「★制限」を「STOP」にしてゾンビの動きを止めるんだ。
「ゴール」メッセージを受け取った各スプライトが、これからクリア演出を担当するよ。
#48ゴールエリアの非表示
準備
スプライト「ゴールトリガー」を開く
実装
( ) を受け取ったとき で「ゴール」を受信したら 隠す で隠すだけ。クリア演出の最中にゴールエリアが見えていたら不自然だからね。
#49BGMの消音
準備
スプライト「ゾンビ」を開く
実装
( ) を受け取ったとき で「ゴール」を受信したら、 音量を ( ) %にする で音量を0にするんだ。BGMのループ再生を止めるのではなく音量を0にしているから、音楽の仕組み自体は壊さずに静かにできるんだよ。
#50ゴールエフェクト開始
準備
スプライト「ゴールエフェクト」を開く
実装
( ) を受け取ったとき で「ゴール」を受信したら、 ( ) 秒待つ で0.1秒だけ待ってからアニメーションを開始するよ。 ずっと ループの中で ( ) へ移動する で最前面に表示して、 大きさを ( ) %にする でサイズを100%にリセットするんだ。0.1秒の待機は他のスプライトが先に準備を終えるための間だよ。
#51エフェクトの初期配置
表示する で表示して、 もし ( ) なら でコスチューム番号が1か2かチェックするよ。該当したら x座標を ( ) 、y座標を ( ) にする で(-40, 0)に配置して、 ( ) の効果を ( ) にする で明るさを100にするんだ。明るさ100は真っ白の状態で、ここから徐々に元の色に戻していくよ。
#52減衰アニメーション準備
準備
変数「★縦」を追加
ゴールエフェクトのX方向の移動速度(指数減衰用)
変数「★横」を追加
ゴールエフェクトのY方向の移動速度(指数減衰用)
実装
( ) を ( ) にする で「★縦」を35、「★横」を20にセットするよ。これがエフェクトの初速になるんだ。 ( ) 回繰り返す で10回繰り返しながら、 ( ) の効果を ( ) ずつ変える で明るさを-10ずつ下げていくよ。10回×-10で明るさが100から0に戻って、真っ白から元の色にフェードインするんだ。
#53指数減衰で中央へ
大きさを ( ) ずつ変える で(130-現在のサイズ)÷5ずつサイズを変化させるよ。目標値との差を割ることで、最初は大きく変化して徐々に落ち着く動きになるんだ。「★縦」も同じ原理で、現在値×0.75に(0-X座標)÷8.5を足して更新するよ。0.75倍で速度を減衰させつつ、中央(0, 0)との距離で補正をかけているんだ。
この「現在値×減衰率+目標への補正」という計算はイージングの基本形で、固定速度の移動では出せないバウンスしながら収まっていく自然な動きが生まれるんだよ。
#54収束アニメーション
( ) 回繰り返す で20回繰り返しながら、今度は目標サイズを100%にして同じ減衰計算を続けるんだ。「★縦」と「★横」の計算は前のステップとほぼ同じだけど、Y方向の補正の割る数が7から5に変わっていて、より強く中央に引き寄せられるよ。
2段階に分けている理由は、最初の10回で勢いよく飛び出して大きくなり、次の20回でゆっくり正しい位置に収まるという緩急をつけるためだよ。
#55エフェクトの繰り返し
x座標を ( ) ずつ変える と y座標を ( ) ずつ変える で「★縦」と「★横」の分だけ移動させるよ。ループが終わったら ( ) 秒待つ で2秒待ってから ずっと の先頭に戻って再びアニメーションが始まるんだ。2秒の間があることで、キラキラが波のように繰り返されるよ。
#56勝利のBGM
準備
スプライト「サムネ」を開く
実装
( ) を受け取ったとき で「ゴール」を受信したら、 ずっと ループの中で 終わるまで ( ) の音を鳴らす を使って「勝利の曲」をリピート再生するよ。ゾンビのBGMは音量0になっているから、勝利の音楽だけが聞こえるんだ。
まとめ
ゲームの基本的な仕組みはすべて完成したよ。変数で速度を管理する物理演算、段階的な衝突判定による壁登り、ブロードキャストで10スプライトを一斉に制御するステージ進行――今回学んだパターンはプラットフォーマーゲームの定番テクニックだよ。次の記事ではズルを防ぐターボモード検出機能を追加して完成させよう!