前回までのあらすじ
「○○に触れた」だけで対処しようとしたら、謎の位置でもブロックに乗れてしまい、空中浮遊状態が・・・!!
足場ブロックの座標を取得
このままだと、これ以上のことが出来ない気がしますので、まずは足場ブロックをスプライトごとにバラバラにしてみます。
足場ブロック用のスプライトをそれぞれ作成。
キャラクターのサイズと座標を考慮する
キャラクターのサイズを確認。
[rml_read_more]
キャラクターのサイズによって、座標(例えば、頭や足の位置)が変わるので、サイズの確認が必要なのと、「中央の点に中心を一致させないと座標がずれる」ので、この点も注意が必要かと思います。
あとは、これを整理していきます。
ブロックに乗れるのは、ジャンプ中・落下中。
「主人公のy座標-25」と「ブロックのy座標+10」に合わせると、ちょうど主人公の足とブロックの上部が一致する。
つまり、条件に「ジャンプ中・落下中」かつ「主人公のy座標-25」が「ブロックのy座標+10」よりも大きい時のみ「主人公のy座標-25」と「ブロックのy座標+10」の座標を一致させる(ブロックに乗る)。
とすれば良い感じになりそうです(厳密にいくとx座標も調整が必要ですが)
直接ブロックの座標を渡せないので変数にする
ブロックの位置が変わることは無いかと思いますが、もし変わった時のことを考えて、「ずっと~」を追加しておきます。
まずは変数でy座標を取得と、使わないかもしれませんが上部のy座標(y座標+10)も取得しておきます。
この場合、ブロックのy座標に35を足したy座標が主人公のy座標になれば、ちょうどブロックの上部に足元が乗っているような状態になります。
良い感じにできました・・・!!
と、言いたいところでしたが、ぎりぎりの端っこに行った時に、謎の挙動が起こりました・・・!
「落下」と「ブロックに乗る」が同時に起こっているように見えます。
「落下する」「足場ブロックに乗る」が同時に発生できるポイントが出来てしまっているようなので、謎の挙動が起こります。
この「ぎりぎり端っこの部分に来た時」は「落下」するように調整が必要です。
足場ブロックまでの距離を条件に加えてあげるとよさそうな気がします。
60未満だとまだ触れたままになってしまうので、もう少し距離が近い方がよさそうです。50辺り・・・でしょうか。
判定の位置が違った?
これでは、落ちる位置が狭くなるだけで、解決にはなりませんでした。というより「○○までの距離」・・・という条件が、ちょっと怪しい気がします。お互いのx座標同士を足した距離で計算してみます。
x座標同士の(絶対値の)差分で判定
単純に引き算してしまうと、主人公の座標によっては、結果がマイナスになってしまう場合が出てくるので、各々の絶対値を引いた結果(の絶対値)を求めます。
x座標を取得する変数をそれぞれ作っておき、各々の「絶対値」同士を引き算します。その結果もマイナスの場合が出てくるので「絶対値」として、距離を判定します。あとは数値を微調整します。
良い感じの位置が見つかりました・・・!今回の場合は距離45あたりがちょうど良い距離のようです・・・!!!
あとは、スペースキー押しっぱなしで、ブロックの下から2段ジャンプのような現象が起きないように、y座標の位置で調整をしてみます。
よさそうに見えましたが、これだとブロックの上でジャンプが出来なくなってしまいます・・・!「○○以上~」が無いのがスクラッチの辛いところです・・・!!
どこまで許容するか・・・?
ブロックの端の位置ギリギリにいる場合、上矢印キーを押しっぱなしにすると、2段ジャンプが出来る場合が発生してしまいます。
とはいえ、あまり厳格にしすぎると厳しくなってしまいすぎるので、この辺りは許容範囲と考える・・・べきでしょうか・・・。
あとは、ジャンプの量やブロックのサイズなどで微調整すれば何とかなりそうな気がします。
まとめ(完成)
ということで、ほとんど完成・・・?!という気がします。
一応、切りの良い第20回(21回目になりましたが)ですので、今回あたりを最終回にしたいと思います!!
次回は、別のゲームを作ってみたいと思います!!乞うご期待・・・!笑