スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。
ジオメトリーダッシュの作り方、第5弾をお届けするよ。
今回の目標「回転ジャンプ!」
このショート動画のように、ジャンプするたびにクルクル回転するような効果を追加していくぞ!
これを実現するにはまず、常に回転する状態を作るんだ。たとえば↓このショート動画みたいに。
しかし!今のまま実装すると、回転した途端に角が地面に食い込んでゲームオーバーになるという即死トラップが発動してしまうのだ😲 なんてことだ!

ゲームオーバー!
そこで今回はいくつかのバグを解決しつつ、最終的に回転ジャンプを実現できるコーディングを進めていくぞ。今回は我々BBB(バグ撲滅部隊)にとって、重要なミッションとなる!心してかかるのだ。

BBB(バグ撲滅部隊)、それは世界を裏で支える影の秘密結社……(うそ)
準備はいいかい?よし、行こう!
バグ① 即死トラップを撲滅せよ。
プレイヤーを選ぶ。

まずはためしにスタート位置のY座標をわざと少し地面に埋もれた状態にしてみよう。

即死トラップが発動するかテストする
ぐは!やられた……。ちょっとでも埋もれるとゲームオーバーになる。まぁそれはいいんだけど、回転ジャンプの事も考えて対策を施しておく。
作戦としては、一瞬だけ地面が描画されるタイミングをずらすことで、一瞬なら埋もれても大丈夫にする、っていう感じ。
スプライト「コース」
コースに切り替えよう。

緑の旗のところで新たに「ゲームスタート」というメッセージを送る。


スプライト「プレイヤー」
プレイヤーに戻ろう。

緑の旗でスタートしていたところを、このメッセージを受け取ったタイミングに変更するぞ。

2箇所だね。

これで改めてちょっとだけ地面に埋もれさせて大丈夫か調べよう。


あんまりにも埋め込みすぎると、結局ゲームオーバーになるから2,3ピクセルだけ埋もれても大丈夫か調べる程度でOK。
バグ② スパイクに当たってないように見えるトラップ
よし、では続いてのバグだ。実はこれは回転ジャンプとは関係ないけど、気になるから直しておくw
スパイクに当たったときの挙動がちょっと変だと感じない?少しスキマが空いてるっぽく見える。
ドカンと当たった!っていうよりは、足の小指が角に当たった!っていう感じに見えるwもっとグイッと食い込ませたい。
そこで、少しだけX座標を修正する処理を加える。

ついでにコスチュームを最前面にしておく。

スパイクにドカンっと衝突するようになったかテストする
いえい!これなら文句無しで衝突&ゲームオーバーだね!
バグ③ 細すぎる白線で落とし穴トラップ
これは、再現できない人もいると思う。そういう人はしっかり線を4ピクセル以上にしている人だ。
スクラッチャーはとにかくいろんなことを試したがる人が多いので、中にはコースの白線をうすーーーーーくした人もいるかもしれない。たとえばここ↓を1ピクセルにしてみる(あとで直すから真似しなくてOK)

そうすると、落とし穴みたいなことになる!
こいつは厳しいよ!いや、逆に面白い?うーん、たしかに!しょぼんのジオメトリーダッシュ、みたいな感じになりそうw
でもとりあえず白線はしっかり4ピクセル以上にしておくぜ。

バグ④ 天井に当たってもゲームが続くトラップ
これはバグっていうより、むしろ仕様変更だ。というかもともとジオメトリーダッシュでは天井に当たるとゲームオーバーなのに、我々はご丁寧に天井に当たっても大丈夫な実装をしてしまっていたのだ!くぅ、痛恨の極み。
まぁ直すのはカンタンだ。↓このブロックを外そう。

代わりにゲームオーバーのメッセージを送るだけ。

天井に当たるとゲームオーバーになるかテストする
ふっふー♪ 天井は当たっちゃダメだよーん。
バグ⑤ 落下速度が大きすぎると地面をすり抜けるトラップ
これは分かりづらいかもしれない。まずプレイヤーのサイズを再確認しよう。

34ピクセルだね。
でさ、この34ピクセルのプレイヤーがスピードYの大きさで落下するじゃん。それでもプレイヤーが白線に触れたらそこでストップする仕組みになっているわけだよね。
でももし、マイナス34ピクセル以上のスピードで落下したらどうだろう。タイミングによっては白線に触れる判定が通らずに、そのまま地面をすり抜けてしまうことが考えられる。

ピューン!ってね。考えられるということは、いつか発生するということなので、事前対策をしておこう。回転ジャンプでぴょんぴょん跳ねてるときにバグったら寒いもんね。
どうすればいいか、っていうヒントは34ピクセルっていうサイズと、落下速度がマイナス4ずつ増えていくっていう仕様から見つけることができる。

34 ÷ 4は何?答えは、えーっと、8.5かな。丸めて8としよう。-4 * 8 は-32だね。これだとギリギリすぎるから-4 * 7で-28にスピードYが達したら、-28以降は落下速度が上がらないように調整することで確実に白線に触れるようにするぞ。
ここにIFを追加する。

条件式と中身でマイナス28を落下速度の最大値に固定しよう。

これでこのバグは未然に防がれた!ふぅ〜!
コロコロ転がる力で楽しさ倍増!
ここでいよいよ回転に関わる直接的な実装を開始する。やっとか!前回までの実装だとプレイヤーの角度を変えると、角が地面に当たってしまう判定になり、ゲームオーバーになってしまうのだ。っていうのは前述していたね。
ここに至るまでずっと直してきたいろいろが功を奏して安全に転がれるはずだ。
さらに実装を進めてコロコロ転がれるようにしてみよう。
まず前を向く。

そして、プレイヤーが動くところで14度右に回るようにしよう!

転がるかテストする
さぁ回るかな?
きちゃー!おむすぎコロリん、って感じw
ジャンプのときにだけ回転するようにする
発想としては「常に回転しているけど、地面に触れているときだけ回転を抑制する」っていうかんじ。
やってみよう。
まずプレイヤーが動く前後に回転のスタイルをセットするブロックを追加する。


実は動画だと「回転方法を左右のみにする」ブロックを使っている。それで大丈夫な人は左右のみにしよう。自分のクリーパーだと左右対称に作れてなくて、キョロキョロしちゃってたからwいっそ回転しないにしようと思って…。でも今後直すかも…。
確実に90度を向く
常に回転している関係上、単純に90度に直すのではなくて少しトリッキーな方法で90度を実現しようと思う。具体的には90度か180度のどっちかを向く演算を作ってみたいと思う。
スクショを参考に演算を組んでほしい。

こんなかんじになる。

これを地面に触れた直後に実行することで、確実に前を向くことができる。

地面では前を向くか、空では回転するかテストする
うおーーー!回転したぞー!なんか最後ひっくり返ってますけどぉw
とりあえずの動きとしては及第点でしょう!
ここまで作れれば回転ジャンプはできたも同然だぜ。
残りの実装はまた執筆するから、ここまで実装して自分なりにコースを作って遊んでみてくれ。コースづくりはジオメトリーダッシュの楽しいところでもあるからね。

質問テンプレート(素早く3回クリックすると全選択できるのでコピーしよう)
・◯◯ ... 記事のどこまで実装が終わったのかを記入しよう。・□□ ... どんな問題が起きているのか、どういうときに起きるのか、具体的に書こう。
・共有済みURL ... たまに共有してない作品URLを書いてる人がいるけど、共有しないとこちらから確認できないからよろしくね。