スクラッチコーチキャンプ ゲームクリエイターに、オレはなる!そんなキミを応援(子供も大人も)
  • ALL
  • はじめての方へ
  • スクラッチゲームの作り方

    敵(エネミー)を倒す|スクラッチでアスレチックゲームの作り方⑳

    敵(エネミー)を倒す|スクラッチでアスレチックゲームの作り方⑳
    この記事は スクラッチコーチで掲載されているオリジナル記事 のバックアップです。
    スターター作品
    なし
    今回の完成サンプル
    なし

    プレイヤーがんづけたら敵を倒せる、っていう動きは今や常識だけど、この挙動を常識になるまで世に広めたのはスーパーマリオの実績の1つだと言われている。踏んだら倒せる、ってよく考えたら奇抜だもんね。常識って怖いぜ。

    今回の目標

    • エネミーを踏んづけたら倒せるようにする
    • その際にプレイヤーがバウンドするようにする
    • 演出もしっかり考える
    • 倒した敵は2度と現れないようにする
    • 敵のスポーン位置によっては、シーン切り替え時に位置を変更する

    エネミーを倒せるようにする

    プレイヤーに触れた際に、プレイヤーのスピードYの値を調べよう。マイナス3未満なら下降中にエネミーに触れた、すなわち踏んづけたと判定しよう。

    音を鳴らす

    倒した時に音が鳴るようにしたいから、Squishスクイッシュ Popポップを追加しよう。

    音が鳴るようにしてみよう。

    レッドダウンにして倒す

    つぶされたコスにして、クローンを削除しよう。その際に演出を加えて倒した感を出すぞ。

    (↑枠外だけどスピードYの判定がプラス3になってるけど、マイナス3が正しい)

    エネミーを倒せるようになったかテストする

    よし!これで最強の敵はザコキャラへと堕ちた。

    プレイヤーがバウンドするようにする

    エネミーを踏んづけたらプレイヤーがバウンドするようにする。

    メッセージが送られるようにする。

    スプライト「プレイヤー」でメッセージを受け取る

    受け取ったらスピードYを10にして軽くバウンドさせよう。

    エネミーを踏んづけたらプレイヤーが跳ねるかテストする

    ふっふー!これでますますエネミーを踏むのが楽しくなっちゃうね。このバウンドを利用しないと越えられないアスレがあっても楽しいかもしれない!うーん、細部にこだわると夢が広がるね!

    アンフェアなスポーンを防ぐ

    ところで、このエネミーのスポーン場所を見るとかなり画面の端だよね。そうするとシーン切り替えで戻ってきた時に、ちょっとゲームバランスが崩れる現象が起きる。

    これはアンフェア、つまり不公平なので修正したい。

    敵(エネミー)を倒す|スクラッチでアスレチックゲームの作り方⑳を語るok-scratch ok-scratch

    u003cpu003eショート動画だと都合よく倒してしまっているけど、実際はプレイヤーがダメージを受けることもある。u003c/pu003eu003cpu003eアンフェアじゃないにしても、プレイヤーがシーンのどこから入ってくるかによってエネミーの配置を変える方法を実装しておけば、いろいろなアイデアが生まれる余地ができるので、やってみよう。u003c/pu003e

    定義「_スポーンする」を作る

    引数が多いから注意して作ってね。

    シーンを切り替えるところの処理をごっそり移動して、元の場所では定義の実行ブロックをおこう。

    敵(エネミー)を倒す|スクラッチでアスレチックゲームの作り方⑳を語るok-scratch ok-scratch

    u003cpu003eいまはレッドしかエネミーがいないからコスはとくに指定してない。だから引数「タイプ」は使ってないけど、エネミーを増やすならタイプが必要になるから用意だけしておこう。u003c/pu003e

    プレイヤーのX座標によってスポーン位置を変える

    今回はとりあえずXにだけ対応すればいい。Yに対応する時も考え方は同じだよ。

    シーンに入ってくる位置によってエネミーのスポーン位置が変わるかテストする

    よしよし、いいかんじ。

    安全エリアを作る

    ところで、エネミーには重力処理がコーディングしてあるから、坂道の上から下に移動してきたり、ゆるやかな坂道なら登ってきたりするのが現状だよね。

    ↓こんな

    でもマリオとかでもそうだけど、エネミーによっては移動範囲を制限したい時がある。坂道は降りてほしくない、とかね。

    これはゲームバランスをキープするためにも重要だよ。たとえばマリオで、待ってれば勝手にガケに落ちるクリボーがいたんだけど、これはこれで面白いけど開発者の本来の意図とは違うと思うんだよね、きっと。

    そこで安全エリアみたいな、目には見えない壁を作って、エネミーはその壁を通り抜けられないようにしてみたい。座標で移動範囲を制限する方法もあるけど

    敵(エネミー)を倒す|スクラッチでアスレチックゲームの作り方⑳を語るok-scratch ok-scratch

    u003cpu003e座標で移動範囲を制限する方法もあるけど、あとから振り返った時に分かりにくいんだよね。「このX座標56ってどこのことだ?」ってシーンのコスとか見直して座標を何らかの方法で確かめて「あ、ここね」と分かる、ってめんどうだぁ(涙)だからコスで見えない壁を用意する方が結局は楽だったりする。u003c/pu003e

    スプライト「安全エリア」をつくる

    障害物を複製しよう。

    スプライト名は安全エリアにしておく。

    コスはシンプルな長方形でいいよ。複雑な形にすれば複雑な移動制限も可能だよ。

    いい感じの場所に設置しよう。ここでは障害物と同じように、中央のアンカーにピタッとくっつけるセンタリングにこだわる必要はない。コスを動かして都合の良い場所に移動しちゃおう。なお、座標はXもYもゼロの状態である必要はあるよ。

    マグマのロジックなどがある場合は不要だから消しておこう。

    スプライト「エネミー」を開く

    エネミーがこの壁に触れたら反転するようにしようか。

    定義「_左右に動く」に条件ブロックを追加しよう。

    条件はスプライト「安全エリア」に触れてないこと。これで今まで通り反転されるようになった。

    ギミックにも対応しておく

    ついでにギミックに触れた時も反転するようにしておこうか。

    「⚪︎または⚪︎」に「安全エリアに触れた」と「ギミックに触れた」を入れた演算ブロックを作る。それを「⚪︎ではない」にはめておこう。

    ↓こうなる。これでギミックでも反転するよ。

    安全エリアで反転するかテストする

    おっけー!これでエネミーの移動制限ができた。ギミックでも反転するから試してみて欲しい。

    安全エリアを見えないようにする

    隠すのではなくて幽霊効果を100にしよう。隠すと触れた判定が狂ってしまう。

    一度やっつけたら復活させない

    ここからは実は、後日グリフパッチさんがバグ修正的な感じで動画をアップしてくれた内容になるよ。タイミング的にここで紹介するのがいいかなと思ったので、今回やっちゃおう。

    一応いまの状態を見ておこう。敵を倒してもシーンに戻ってみると復活してしまっているよ。

    これを防ぐにはリストを使うと効率的。ちょうど重要アイテムの時と同じような考え方かな。

    スプライト「エネミー」に処理を追加していくよ。

    リスト「★やっつけたエネミー」を作る

    セットアップする際に、このリストは初期化されるようにしておこう。

    変数「ID」をつくる

    定義「_スポーンする」でIDを使う

    この定義の引数を組み合わせて個体ごとのIDとして使おうと思う。

    敵(エネミー)を倒す|スクラッチでアスレチックゲームの作り方⑳を語るok-scratch ok-scratch

    u003cpu003e厳密な個体別IDを作りたい人は、この定義に引数「ID」を追加しよう。そうすればIDを手入力することで確実に個体ごとに違う値を割り当てられる。グリフパッチさんはそうしてる。u003c/pu003e

    このIDに入れる値は↓こんなかんじで各引数を「⚪︎と⚪︎」でつなげていく。

    これを変数にセットすれば、ゆるいけどだいたい個別IDが作れる。

    そして条件ブロックで、リストにこのIDが含まれているか調べよう。含まれているならスポーン処理を中断する。

    プレイヤーに踏まれたらIDをリストに追加する

    一度倒したエネミーは復活しないかテストする

    よし、テスト。ってアレ?復活してるのもいるけど、崖の上の敵は消えてるね!

    シーンが切り替わったときに、戻ってくるときだけ場所を変えたエネミーがいたよね。その子は(X座標が違うから)IDが変わってしまうから↑のショート動画みたいに復活してしまうけど、まぁこのくらいならいいかなと思って放置した。

    これを修正したい場合は、定義「_スポーンさせる」させるにIDという引数を1つ追加して、それを変数「ID」にセットするようにしてみよう。そうすれば位置が変わった同一個体のエネミーを排除できるよ。

    まとめ

    よおおおおし!エネミーの実装もほぼ完成!いまはレッドしかいないけど、十分やっかいな存在ができたね。

    次回はギミックに大革命を追加する。人類が文明を加速させる原動力となった力、そう、回転だ!回転こそが我々の文明を支えていると言っても過言ではない、と思う!

    すんごいハイレベルなアスレが作れそうじゃない?!ここまでいければ究極のアスレと豪語しても許される気がする!

    当連載で取り上げるグリフパッチさんの動画はこちら

    この記事への質問やコメントをどうぞ

    ただいま実験的に質問を受け付けています。

    コメントは受け付けていません。

    スパム防止のため、 質問をするにはログインが必要 です。ログインはスクラッチのアカウントがあれば誰でもできます。

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