一分間スクラッチ講座|スクロール処理②コスチューム変更で天井跳ね返りがうまくいかない原因
前回の記事では、スクラッチで左右のスクロール処理を作り、歩いているように見せるためにコスチュームを切り替える処理を追加しました。
ところが、コスチュームを切り替えたあと、以前はできていた天井にぶつかったときの跳ね返り処理が、うまく動かなくなってしまうことがあります。
今回は、その原因と対策について解説します。
下の動画は、不定期配信の
「ファイブボックス 一分間スクラッチ講座」です。
ご興味のある方は、あわせてご覧ください。
原因は「コスチュームの高さの違い」
まずは、前回までのスクリプトを確認します。

続いて、使用しているキャラクター(キャット)のコスチュームを確認してみましょう。
下の図のように、2つのコスチュームの大きさが少し違っています。
コスチューム1の高さ:101
コスチューム2の高さ:106
つまり、コスチューム2の方が5だけ高い状態です。

一見すると小さな違いに見えますが、ジャンプ処理や当たり判定では、この差が不具合の原因になることがあります。
なぜ天井を突き抜けてしまうのか
天井にぶつかったときの処理では、変数「ジャンプ力」を使って、上に向かっているのか、下に向かっているのかを判断しています。
たとえば、ジャンプ力が0より大きいときは、キャラクターが上に向かっている状態です。
このとき天井に触れたら、天井から離れるまで、y座標を少しずつ下げます。
ところが、コスチュームが切り替わると、次のような流れになることがあります。
天井突き抜けが起きる流れ
コスチューム1で天井に触れる
ジャンプ力が0より大きいので、y座標を下げて天井から離れる
ジャンプ力を0にする
コスチューム2に変わる
コスチューム2の方が高いため、再び天井に触れてしまう
しかし、このときジャンプ力は0
落下中や着地中の判定として処理される
y座標を上げる処理が動き、天井を突き抜けてしまう

ポイントは、コスチュームが変わったことで、見た目の高さが変わってしまうことです。
プログラムとしては正しく動いているつもりでも、コスチュームの大きさが変わることで、当たり判定の結果が変わってしまいます。
今回の対策
この問題への対策はいくつかあります。
よく使われる方法の一つは、次のような方法です。
実際にジャンプやスクロールの処理をする透明なスプライトを作る
キャラクターの見た目は、別のスプライトとして追従させる
この方法を使うと、見た目のアニメーションが変わっても、当たり判定用のスプライトは変わらないため、処理が安定します。
ただし、少し仕組みが複雑になります。
そこで今回は、もっと基本的な対策として、コスチュームの高さをそろえる方法を使います。
コスチュームの高さをそろえる
今回は、コスチューム2のキャットの右足を少し持ち上げて、コスチューム1と同じ高さになるように調整します。
目標は、コスチューム1とコスチューム2の高さをそろえることです。

今回の場合は、コスチューム1の高さが101なので、コスチューム2も高さ101になるように調整します。
これで、コスチュームが切り替わっても、高さの差によって天井に再度触れてしまう問題を防ぎやすくなります。
中心位置もそろえる
高さをそろえたら、次に中心位置も確認します。
スクラッチのコスチュームには、中心位置があります。
この中心位置がずれていると、同じ座標にいるはずなのに、コスチュームを切り替えた瞬間にキャラクターの位置がずれて見えることがあります。
そのため、コスチュームの高さだけでなく、中心位置も合わせておきましょう。

中心位置をそろえておくと、コスチュームを切り替えたときのズレが少なくなり、当たり判定も安定しやすくなります。
まとめ
今回は、コスチュームを切り替えたあとに、天井の跳ね返り処理がうまく動かなくなる原因を解説しました。
原因は、2つのコスチュームの高さが違っていたことです。
コスチュームの高さが違うと、天井から離れたはずなのに、コスチュームを切り替えた瞬間に再び天井に触れてしまうことがあります。
その結果、ジャンプ力の状態と当たり判定の結果がかみ合わず、天井を突き抜けるような動きになってしまいます。
今回の対策は、次の2つです。
コスチュームの高さをそろえる
コスチュームの中心位置をそろえる
スクラッチでは、プログラムだけでなく、コスチュームの大きさや中心位置も動きに影響します。
うまく動かないときは、ブロックだけでなく、コスチュームのサイズや中心位置も確認してみてください。
ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!