スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。
質問テンプレート(素早く3回クリックすると全選択できるのでコピーしよう)
・◯◯ ... 記事のどこまで実装が終わったのかを記入しよう。・□□ ... どんな問題が起きているのか、どういうときに起きるのか、具体的に書こう。
・共有済みURL ... たまに共有してない作品URLを書いてる人がいるけど、共有しないとこちらから確認できないからよろしくね。
プレイヤーが踏んづけたら敵を倒せる、っていう動きは今や常識だけど、この挙動を常識になるまで世に広めたのはスーパーマリオの実績の1つだと言われている。踏んだら倒せる、ってよく考えたら奇抜だもんね。常識って怖いぜ。
- ① まずはここからレッツゴー!
- ② リファクタリング)ステージをスプライトにしよう
- ③ シーンの切り替えのベース処理
- ④ ヒットボックスを使おう
- ⑤ アニメーションを実装しよう
- ⑥ 絶望の坂道処理を克服する
- ⑦ 長押しで大ジャンプする
- ⑧ 壁をツツ〜っとスライドする
- ⑨ か、壁ジャンプだと!?かっこよすぎるだろ
- ⑩ ステージがヨコにだけ続くと誰が言った?タテ構造
- ⑪ うわ!障害物が行く手をさえぎるぞ
- ⑫ 動く床のギミックを作ろう!
- ⑬ ギミックに乗っているときの衝突処理
- ⑭ オシャレなグラフィックを作るコツ
- ⑮ アイテムをゲットできればゲームに目的ができる!
- ⑯ 重要アイテムがないと開かないドア!?たぎる!
- ⑰ チェックポイントを作って激ムズなアスレを作ろう!
- ⑱ ゲームオーバーを作って緊張感をキープする!
- ⑲ エネミーが現れた!どうすりゃいいのよ!?
- ⑳ エネミーを踏んづけろ! (いまここ)
今回の目標
- エネミーを踏んづけたら倒せるようにする
- その際にプレイヤーがバウンドするようにする
- 演出もしっかり考える
- 倒した敵は2度と現れないようにする
- 敵のスポーン位置によっては、シーン切り替え時に位置を変更する
エネミーを倒せるようにする
プレイヤーに触れた際に、プレイヤーのスピードYの値を調べよう。マイナス3未満なら下降中にエネミーに触れた、すなわち踏んづけたと判定しよう。
音を鳴らす
倒した時に音が鳴るようにしたいから、Squish Popを追加しよう。
音が鳴るようにしてみよう。
レッドダウンにして倒す
つぶされたコスにして、クローンを削除しよう。その際に演出を加えて倒した感を出すぞ。
(↑枠外だけどスピードYの判定がプラス3になってるけど、マイナス3が正しい)
エネミーを倒せるようになったかテストする
よし!これで最強の敵はザコキャラへと堕ちた。
プレイヤーがバウンドするようにする
エネミーを踏んづけたらプレイヤーがバウンドするようにする。
メッセージが送られるようにする。
スプライト「プレイヤー」でメッセージを受け取る
受け取ったらスピードYを10にして軽くバウンドさせよう。
エネミーを踏んづけたらプレイヤーが跳ねるかテストする
ふっふー!これでますますエネミーを踏むのが楽しくなっちゃうね。このバウンドを利用しないと越えられないアスレがあっても楽しいかもしれない!うーん、細部にこだわると夢が広がるね!
アンフェアなスポーンを防ぐ
ところで、このエネミーのスポーン場所を見るとかなり画面の端だよね。そうするとシーン切り替えで戻ってきた時に、ちょっとゲームバランスが崩れる現象が起きる。
これはアンフェア、つまり不公平なので修正したい。
ショート動画だと都合よく倒してしまっているけど、実際はプレイヤーがダメージを受けることもある。
アンフェアじゃないにしても、プレイヤーがシーンのどこから入ってくるかによってエネミーの配置を変える方法を実装しておけば、いろいろなアイデアが生まれる余地ができるので、やってみよう。
定義「_スポーンする」を作る
引数が多いから注意して作ってね。
シーンを切り替えるところの処理をごっそり移動して、元の場所では定義の実行ブロックをおこう。
いまはレッドしかエネミーがいないからコスはとくに指定してない。だから引数「タイプ」は使ってないけど、エネミーを増やすならタイプが必要になるから用意だけしておこう。
プレイヤーのX座標によってスポーン位置を変える
今回はとりあえずXにだけ対応すればいい。Yに対応する時も考え方は同じだよ。
シーンに入ってくる位置によってエネミーのスポーン位置が変わるかテストする
よしよし、いいかんじ。
安全エリアを作る
ところで、エネミーには重力処理がコーディングしてあるから、坂道の上から下に移動してきたり、ゆるやかな坂道なら登ってきたりするのが現状だよね。
↓こんな
でもマリオとかでもそうだけど、エネミーによっては移動範囲を制限したい時がある。坂道は降りてほしくない、とかね。
これはゲームバランスをキープするためにも重要だよ。たとえばマリオで、待ってれば勝手にガケに落ちるクリボーがいたんだけど、これはこれで面白いけど開発者の本来の意図とは違うと思うんだよね、きっと。
そこで安全エリアみたいな、目には見えない壁を作って、エネミーはその壁を通り抜けられないようにしてみたい。座標で移動範囲を制限する方法もあるけど
座標で移動範囲を制限する方法もあるけど、あとから振り返った時に分かりにくいんだよね。「このX座標56ってどこのことだ?」ってシーンのコスとか見直して座標を何らかの方法で確かめて「あ、ここね」と分かる、ってめんどうだぁ(涙)だからコスで見えない壁を用意する方が結局は楽だったりする。
スプライト「安全エリア」をつくる
障害物を複製しよう。
スプライト名は安全エリアにしておく。
コスはシンプルな長方形でいいよ。複雑な形にすれば複雑な移動制限も可能だよ。
いい感じの場所に設置しよう。ここでは障害物と同じように、中央のアンカーにピタッとくっつけるセンタリングにこだわる必要はない。コスを動かして都合の良い場所に移動しちゃおう。なお、座標はXもYもゼロの状態である必要はあるよ。
マグマのロジックなどがある場合は不要だから消しておこう。
スプライト「エネミー」を開く
エネミーがこの壁に触れたら反転するようにしようか。
定義「_左右に動く」に条件ブロックを追加しよう。
条件はスプライト「安全エリア」に触れてないこと。これで今まで通り反転されるようになった。
ギミックにも対応しておく
ついでにギミックに触れた時も反転するようにしておこうか。
「⚪︎または⚪︎」に「安全エリアに触れた」と「ギミックに触れた」を入れた演算ブロックを作る。それを「⚪︎ではない」にはめておこう。
↓こうなる。これでギミックでも反転するよ。
安全エリアで反転するかテストする
おっけー!これでエネミーの移動制限ができた。ギミックでも反転するから試してみて欲しい。
安全エリアを見えないようにする
隠すのではなくて幽霊効果を100にしよう。隠すと触れた判定が狂ってしまう。
一度やっつけたら復活させない
ここからは実は、後日グリフパッチさんがバグ修正的な感じで動画をアップしてくれた内容になるよ。タイミング的にここで紹介するのがいいかなと思ったので、今回やっちゃおう。
一応いまの状態を見ておこう。敵を倒してもシーンに戻ってみると復活してしまっているよ。
これを防ぐにはリストを使うと効率的。ちょうど重要アイテムの時と同じような考え方かな。
スプライト「エネミー」に処理を追加していくよ。
リスト「★やっつけたエネミー」を作る
セットアップする際に、このリストは初期化されるようにしておこう。
変数「ID」をつくる
定義「_スポーンする」でIDを使う
この定義の引数を組み合わせて個体ごとのIDとして使おうと思う。
厳密な個体別IDを作りたい人は、この定義に引数「ID」を追加しよう。そうすればIDを手入力することで確実に個体ごとに違う値を割り当てられる。グリフパッチさんはそうしてる。
このIDに入れる値は↓こんなかんじで各引数を「⚪︎と⚪︎」でつなげていく。
これを変数にセットすれば、ゆるいけどだいたい個別IDが作れる。
そして条件ブロックで、リストにこのIDが含まれているか調べよう。含まれているならスポーン処理を中断する。
プレイヤーに踏まれたらIDをリストに追加する
一度倒したエネミーは復活しないかテストする
よし、テスト。ってアレ?復活してるのもいるけど、崖の上の敵は消えてるね!
シーンが切り替わったときに、戻ってくるときだけ場所を変えたエネミーがいたよね。その子は(X座標が違うから)IDが変わってしまうから↑のショート動画みたいに復活してしまうけど、まぁこのくらいならいいかなと思って放置した。
これを修正したい場合は、定義「_スポーンさせる」させるにIDという引数を1つ追加して、それを変数「ID」にセットするようにしてみよう。そうすれば位置が変わった同一個体のエネミーを排除できるよ。
まとめ
よおおおおし!エネミーの実装もほぼ完成!いまはレッドしかいないけど、十分やっかいな存在ができたね。
次回はギミックに大革命を追加する。人類が文明を加速させる原動力となった力、そう、回転だ!回転こそが我々の文明を支えていると言っても過言ではない、と思う!
すんごいハイレベルなアスレが作れそうじゃない?!ここまでいければ究極のアスレと豪語しても許される気がする!
- ① まずはここからレッツゴー!
- ② リファクタリング)ステージをスプライトにしよう
- ③ シーンの切り替えのベース処理
- ④ ヒットボックスを使おう
- ⑤ アニメーションを実装しよう
- ⑥ 絶望の坂道処理を克服する
- ⑦ 長押しで大ジャンプする
- ⑧ 壁をツツ〜っとスライドする
- ⑨ か、壁ジャンプだと!?かっこよすぎるだろ
- ⑩ ステージがヨコにだけ続くと誰が言った?タテ構造
- ⑪ うわ!障害物が行く手をさえぎるぞ
- ⑫ 動く床のギミックを作ろう!
- ⑬ ギミックに乗っているときの衝突処理
- ⑭ オシャレなグラフィックを作るコツ
- ⑮ アイテムをゲットできればゲームに目的ができる!
- ⑯ 重要アイテムがないと開かないドア!?たぎる!
- ⑰ チェックポイントを作って激ムズなアスレを作ろう!
- ⑱ ゲームオーバーを作って緊張感をキープする!
- ⑲ エネミーが現れた!どうすりゃいいのよ!?
- ⑳ エネミーを踏んづけろ! (いまここ)