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

    ギミックに乗ってるときの衝突処理|スクラッチでアスレチックゲームの作り方⑬

    ギミックに乗ってるときの衝突処理|スクラッチでアスレチックゲームの作り方⑬
    この記事は スクラッチコーチで掲載されているオリジナル記事 のバックアップです。
    スターター作品
    なし
    今回の完成サンプル
    なし

    ギミックにすごくこだわっていきたい。なぜならギミックはアスレをめちゃめちゃ面白くしてくれるから。マリオでもゼルダでもなんでも、アクション要素のあるゲームではギミックが絶対に登場する。それだけギミックはゲームにおいて必要不可欠な存在になってきたということだ。

    スクラッチでもギミックを洗練して作り込んでいくことで、「え!?これスクラッチなの?!」と共学のクオリティを誇るゲームを作ることができる。

    このシリーズでももっと後半でギミックを爆発的に改善してもっともっと熱いアスレが作れるようになる。そのためにもここでギミックの土台を完成させておきたい。

    一緒に作り込んでいこう!

    今回の目標

    今回の目標はギミックに乗っていても衝突判定が自然に働くようにすることだ。せっかくギミックを作るなら、いろんな用途で使いたい。中には壁を貫通して動くギミックを作ることもあるだろう。そんなときでもしっかりゲーム物理上は自然に見える判定処理を作っておきたい。ここが適当だと「あー、まぁスクラッチだしなぁ」とガッカリされてしまうからね。そんな思いはさせたくない。「まじかよ!」って思われたい!

    スプライト「ギミック」を横に動くように調整する

    壁貫通するギミックを用意したいので、ギミックを横に動くようにして、ステージ上の壁を貫通するくらいに座標の動きを広げよう。

    座標を調整する。

    壁を貫通するギミックが用意できたかテストする

    おk。

    しかし、ギミックの上に乗るために衝突判定がタテ方向に実行されてて、その状態で壁にヨコ方向から当たったためにY軸に不自然な動きをしている。瞬間的に地面までワープしちゃってるように見えるね。これは改善しないとダメそう。

    ギミックに乗っているときはタテだけではなくヨコにも衝突判定をしておかないと、壁に当たったときに不自然になるわけだ。

    しかし、単純に両方向に実行するのではなく、同時にヨコにもタテにも衝突判定を行いたい。すなわち、円形に衝突判定を繰り返す処理を作りたい。

    スプライト「プレイヤー」の埋もれ判定を改善する

    現在のプレイヤーは埋もれ判定をゼロ度(上方向)か90度(横方向)にのみチェックしているけど、これを円形にスペースを探す処理に変えるように改善していくところから始めます。

    定義「_最寄りのスペースを探す」を作る

    引数が3つあるので注意して作ろう。

    最初の処理としては一時的な変数「値」に向きを持たせておき、あと変数「距離」を1にして、とりあえず上向きにする。

    そして引数「上限」の回数繰り返すループを置こう。

    そのなかで、とりあえず16回繰り返すループを置く。

    ここで引数XとYをセットする。

    そして距離の分だけずらす。

    ずれた場所でステージに触れているかどうかを調べる。

    ステージに触れてなければ、そこはスペースということなので埋もれがないはずだ。ここで向きを元に戻して処理はストップしてOK。

    もしステージに触れている状態、つまりまだ埋もれているなら、角度を変えて再びループを繰り返す。

    合計16回繰り返してもなお埋もれが解消されなければ、距離を1だけ増やして、引数「上限」のループを繰り返す。

    最終的に埋もれが解消されなかったなら、とりあえずXとYを元に戻す。

    角度も戻して終わり。

    スペースを探す処理が円形に実行されるようになったかテストする

    このショート動画は、テストのためにいったん定義を「再描画アリ」にして実行してるので注意。再描画無しの状態なら、とちゅうのグルグルする動きはユーザーに見えることはないので安心してほしい。

    定義「_ギミックで動く」で最寄りのスペースを探す処理を実行する

    ギミックに乗ってるときの衝突処理|スクラッチでアスレチックゲームの作り方⑬を語るok-scratch ok-scratch

    u003cpu003e上限の部分はゲームによって異なるので、バランスを調整してほしい。まぁだいたい16回から48回くらいかなぁ。それ以上でもいいけど、めっちゃ埋もれてる状態だと思うので別の部分になにか問題がある可能性もある。u003c/pu003e

    動くギミックに乗っている状態で壁に当たっても自然な動きになったかテストする

    おお!直ってるね。

    さっきまではギミックの上に乗るために衝突判定が縦方向に実行されてて、その状態で壁に横方向から当たったためにY軸に不自然な動きをしていた。

    タテ方向に壁に衝突した際もうまくいくかテストする

    ヨコはOKだったけどタテは…

    大丈夫そう!円形の埋もれ処理が機能しているから、タテでもヨコでも抜け目無し!

    ギミックにつぶされた処理を改善する

    ギミックにつぶされたらリスポーンするように処理を改善しよう。

    定義「_ギミックで動く」でダメージを受けたを送る

    ギミックで動く際に、スペースを探したあとに再びステージに触れているかどうかを判定する条件ブロックを置こう。スペースを探したあとにも関わらず、まだステージに触れている場合はギミックに潰されていると判断して、ダメージを受けたというメッセージを送ろう。

    ギミックに乗ってるときの衝突処理|スクラッチでアスレチックゲームの作り方⑬を語るok-scratch ok-scratch

    u003cpu003e定義「_最寄りのスペースを探す」のなかですでに定義「_ステージに触れているか調べる」を実行しているので、この条件ブロックの直前では実行する必要ないよ。u003c/pu003e

    オマケ、ドッスンを作る

    この段階でも、すでにギミックは十分に洗練されている。だからアイデア次第でいろいろなギミックを作れる。君なりのクールなギミックを作ってみてほしい。

    ここでは1つのサンプルとして、マリオのドッスンみたいな動きをするギミックを作ってみた。

    ゆっくりと上方向に移動して、少し待機してから一気にドスン!と下がるギミックだよ。それだけなら別に脅威ではないけど、設置する場所によっては厄介な仕掛けになるから楽しい。

    スプライト「ギミック」をひらこう。

    定義「動く2」を作ろう。名前が適当すぎるw

    シーン3のときにこのギミックを設ける。

    ドッスンらしく、上方向にゆっくり上がって、ドスンと0.1秒で下がるようにする。

    さぁ、ドッスンがうまくいってるか見てみよう。

    わお、マグマを飛び越える先にドッスンがあって、厄介だね!!タイミングが合わないとドッスンが下がって着地失敗したり、ドッスンにつぶされたりしちゃう。こういうハラハラを演出できると楽しいアスレが仕上がるよね!!

    まとめ

    ギミックの土台が完成した。これでキミのアスレに動きのある仕掛けを置きたい放題だ。

    エレベーターみたいなギミック、動くギミック同士をジャンプして渡るマグマエリアなど、やりたい放題だぜ!

    んー、とはいえステージのグラフィックが殺風景だなぁ。このあたり改善したい。ゲーム性とは関係ないけど、オシャレっていうだけでスゴイゲームっぽいじゃんw

    たとえばこんなデザイナはどう?

    背景に斜めのラインがオシャレ!しかもステージに影がついてるのが分かる?この影もコスチュームを加工しているのではなく、プログラムで描いてるから楽ちん!そんな方法を次回は共有するぞ!

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

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

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

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

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

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