スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。
前回は埋もれ修正を整えたけど、そういえば天井に埋もれた場合はどうなるんだろうか。そこらへんを見ていこう。あと、壁に横からあたった場合にはテレポートしてしまう現象が放置したままだから合わせて直す。
- ① 天元突破ジオメトリーダッシュ、スタート!
- ② トゲトゲ(スパイク)を追加してデンジャラスなダッシュにしちゃう!
- ③ ツヨツヨ物理演算を作る
- ④ テレポートバグをやっつけろ! (いまここ)
今回のゴール
壁にぶつかったらしっかりゲームオーバーになるようにしていくぞ。
- 天井に当たっても埋もれない
- 埋もれ処理をさらに洗練する
- 壁にあたったらゲームオーバー
天井処理を作る
いま天井に触れるとどうなるかチェックしておこう。
スプライト「コース」を開く。
ブロックを、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座標分のゆとりも設ければ、だいたいの埋もれには対応できるはずだ。
これを実装したらどうなるか、一緒にやってみよう。
埋もれ修正を改善する
このスクショ↓を見てガッツリ作り直してほしい。
最後にもう一回4座標ずらしているのは、(計算前の)元の位置に戻すためだよ。
条件式のところには、もともと使ってた「白から離れるまで」を入れよう。
埋もれ修正がどうなったかテスト
落ちた(笑)
まぁOK!どうせここでゲームオーバーにするから関係ない。
ゲームオーバーをイベント化する
ゲームオーバーを改修するぞ。
メッセージ「ゲームオーバー」を作る
これを最後に付けよう。
あと緑の旗が押された時の処理にも改修を加える。
この位置で切り離して。
そしてゲームオーバーを送るブロックと、ゲームオーバーのハットブロックを設置しよう。
壁にぶつかってみる
長い人生、ときにはわざと壁にぶつかることも必要やで(なんのこと?)
うん、9割OK!でも最後の瞬間に1座標だけ余計に壁にめり込んでるの分かる?
これを直す。
ここの順番変えるだけで直るよ。
「なんでこれで直るか、自分なりに考えてみてくれ」とグリフパッチさんが問いかけているよ。考えてみてね〜。
あと、白線をわざとずらしたバージョンもテストしておいたから、このショート動画もチェックしてみて。
うん、ちょっとくらいのズレなら問題なくゲームが続くね!よきよき。
まとめ
ここまでできたら、色んなブロックやスパイクを設置してちょっとしたジオメトリーダッシュを作ることも可能だ!
ブロックを2個、3個、4個と積み重ねた柱を3本並べてステレオマッドネスで特徴的な地形を作ることも可能だぞ!
いろいろやってみてね。
あとはリクエスト次第で続きも書いていくね!読みたい人は是非教えてね〜。
グリフパッチさんのジオメトリーダッシュはこちら
- ① 天元突破ジオメトリーダッシュ、スタート!
- ② トゲトゲ(スパイク)を追加してデンジャラスなダッシュにしちゃう!
- ③ ツヨツヨ物理演算を作る
- ④ テレポートバグをやっつけろ! (いまここ)
質問テンプレート(素早く3回クリックすると全選択できるのでコピーしよう)
・◯◯ ... 記事のどこまで実装が終わったのかを記入しよう。・□□ ... どんな問題が起きているのか、どういうときに起きるのか、具体的に書こう。
・共有済みURL ... たまに共有してない作品URLを書いてる人がいるけど、共有しないとこちらから確認できないからよろしくね。