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

    ジオメトリーダッシュの作り方④ テレポートバグ

    ジオメトリーダッシュの作り方④ テレポートバグ
    この記事は スクラッチコーチで掲載されているオリジナル記事 のバックアップです。
    スターター作品
    なし
    今回の完成サンプル
    なし

    前回は埋もれ修正を整えたけど、そういえば天井に埋もれた場合はどうなるんだろうか。そこらへんを見ていこう。あと、壁に横からあたった場合にはテレポートしてしまう現象が放置したままだから合わせて直す。

    今回のゴール

    壁にぶつかったらしっかりゲームオーバーになるようにしていくぞ。

    • 天井に当たっても埋もれない
    • 埋もれ処理をさらに洗練する
    • 壁にあたったらゲームオーバー

    天井処理を作る

    いま天井に触れるとどうなるかチェックしておこう。

    スプライト「コース」を開く。

    ブロックを、Shiftキーを押しながら選択して上に持ち上げよう。

    ジャンプして天井に当たる挙動をチェック

    うわ、なんか一瞬でブロックの上方までぶっとんだ(笑)

    これは埋もれ修正の処理のせい。埋もれが解消されるまでY座標をプラス1してるから、下から当たるとぶっとんだように見える。

    まぁこの動き面白いけど、今回はジオメトリーダッシュと同じ仕様にしたいからちゃんと直そうか。

    埋もれ修正処理を改良する

    スプライト「プレイヤー」を開く。

    「もし白に触れたら」という条件分岐ブロックの中に、もう一つ「もし〜なら、でなければ〜」ブロックを置こう。

    条件式でスピードYの値を確認して、上昇中かどうかを調べる。上昇中ではないなら、いままでの処理を実行する。

    「でなければ」の方で、上昇中の処理を作っていく。

    引数を追加する

    定義「_埋もれを修正する」を右クリックして引数を追加しよう。「方向」という名前にしておいて。

    スクショを見て「方向」適用しよう!

    • 上昇中でなければ、今までどおりY座標にプラス1する
    • 上昇中なら、Y座標にマイナス1する

    天井に対する埋もれ修正が効いてるかテストする

    頭ゴンゴンってなってる!痛そうだけど成功(笑)

    ゲームオーバーを改善する

    スプライト「コース」を開いて。

    ブロックを地面に戻しておこう。

    テレポートバグを直す

    まだ壁に横からぶつかった時のテレポートバグが残ってるんだよね。

    スプライト「プレイヤー」を開く。

    埋もれを修正する定義を、ごっそり切り離してしまってほしい。ほぼ作り直す!

    埋もれ修正ロジックの仕組みを理解する

    ちょっと複雑だから図解していく。

    テレポート原因と対策

    テレポートしてしまう原因は「白に触れなくなるまで(ずっと)」Y座標を変えているからだよね。

    じゃあさ、1回だけY座標を変えてみたらどうかな。

    これなら壁に関してはテレポートしなくなるよね。でもなんか色々バグが起きそう。

    とくに今までになかったこんなバグが起きる。

    地面の白線が少しでもズレてたらゲームオーバーになるというストレスな状況が発生してしまう。これは開発者にとってもデリケートなコスチューム制作が求められるようになり、正直しんどい。

    4回繰り返したらどうだろう

    1回だけじゃなくて複数回繰り返せば解決するかもね。

    ためしに4回Y座標を変えるようにしてみる。

    うん、ゲームオーバーが正解だからこれでも壁に関しては大丈夫だし、さっきの白線がズレてたらゲームオーバーという問題も解決しそう。

    あー、でも待って。まだ新しく考えなきゃいけないことがある。

    ジャンプ中の衝突判定が甘くなる

    例えばジャンプしたのに、ちょこっとだけ高さが足りずにブロックに登りきれなかったケースを考えてみよう。ジオメトリーダッシュだとよくあるケースだよね。

    おっとぉ、今のロジックだとジャンプが足りなくても4座標分ならオマケでクリアできちゃうね。これはこれでイージーモードって感じで面白い。けどとりあえず直す。

    ダブルチェックしてみる

    いったんY座標を上に4回上げたけど、そのあとしっかり8回下げてみて埋もれるか試してみたらどうかな。

    お、しっかりゲームオーバーになったね。これでいいのかな。もう少し考察を進めてみよう。

    じゃあ下降中はどうなるだろうか。

    下降中は逆にいったん下に4座標下げてから、上に8座標上げるダブルチェックをしてみようか。

    うん、下降中はこれで問題ないね!

    ならこのダブルチェック方式で解決なのかな。

    いや、実はこれだとまだバグってる現象がある。

    深い埋もれが解決できなくなってる

    さっきまでは「埋もれが解消するまでずっと」Y座標に変更を加えていたけど、それはやめていく方向だよね。そうすると深い埋もれが解消できずに、こんな↓バグが起きる。

    あちゃー、けっこう良さそうだったけど、振り出しに戻った感じだね。

    でも大丈夫。深い埋もれにも対応する方法がある。

    ここで使えるのは変数「スピードY」の値だ。厳密に言うとスピードYの絶対値だ。

    これを使えばこうなる↓

    そう、埋もれ判定の際にスピードYの値も考慮してチェックを行えば、カッチリ埋もれた分だけY座標を動かすことができる。さらに「白線がちょっとでもズレてたらアウト」という厳しいルールを避けるために4座標分のゆとりも設ければ、だいたいの埋もれには対応できるはずだ。

    これを実装したらどうなるか、一緒にやってみよう。

    埋もれ修正を改善する

    このスクショ↓を見てガッツリ作り直してほしい。

    ジオメトリーダッシュの作り方④ テレポートバグを語るok-scratch ok-scratch

    u003cpu003e最後にもう一回4座標ずらしているのは、(計算前の)元の位置に戻すためだよ。u003c/pu003e

    条件式のところには、もともと使ってた「白から離れるまで」を入れよう。

    埋もれ修正がどうなったかテスト

    落ちた(笑)

    まぁOK!どうせここでゲームオーバーにするから関係ない。

    ゲームオーバーをイベント化する

    ゲームオーバーを改修するぞ。

    メッセージ「ゲームオーバー」を作る

    これを最後に付けよう。

    あと緑の旗が押された時の処理にも改修を加える。

    この位置で切り離して。

    そしてゲームオーバーを送るブロックと、ゲームオーバーのハットブロックを設置しよう。

    壁にぶつかってみる

    長い人生、ときにはわざと壁にぶつかることも必要やで(なんのこと?)

    うん、9割OK!でも最後の瞬間に1座標だけ余計に壁にめり込んでるの分かる?

    これを直す。

    ここの順番変えるだけで直るよ。

    ジオメトリーダッシュの作り方④ テレポートバグを語るok-scratch ok-scratch

    u003cpu003e「なんでこれで直るか、自分なりに考えてみてくれ」とグリフパッチさんが問いかけているよ。考えてみてね〜。u003c/pu003e

    あと、白線をわざとずらしたバージョンもテストしておいたから、このショート動画もチェックしてみて。

    うん、ちょっとくらいのズレなら問題なくゲームが続くね!よきよき。

    まとめ

    ここまでできたら、色んなブロックやスパイクを設置してちょっとしたジオメトリーダッシュを作ることも可能だ!

    ブロックを2個、3個、4個と積み重ねた柱を3本並べてステレオマッドネスで特徴的な地形を作ることも可能だぞ!

    いろいろやってみてね。

    あとはリクエスト次第で続きも書いていくね!読みたい人は是非教えてね〜。

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

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

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

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