まったりFuropenブログ

ではごゆっくり

スーパーマリオブラザーズ3 壁抜けについて(ブロック乗り判定編)

この記事ではブロックに乗るということついてのお話をします。
壁抜けの原理的な話です、知る必要はないです。


普段何気なくジャンプをして地面に着地しています。
実は着地するとき地面にめり込んで落下速度が0になり、上に押し戻されるようです。

これは深さ4px分までなら上に押し戻すようで、ブロックに乗れたことになります。
反対に5px以上の深さならブロックに乗れていないと判定されます

(最大落下速度は4pxなので、横からぶつかった時の判定用ですね)
また、落下時のみ乗れて、上昇中には乗れません

従って、ブロック上面から深さ0px~4pxのときブロックに乗ったという判定になります




せっかく、上図のように進行方向に3pxめり込んでも、高さが合わなければ(2px高い)
ブロックに乗っていないことになり、押し戻されて壁抜けが実現できません。



成功例、高さが合っている



ブロックに乗っているのでしゃがみが解除され、マリオは立ち、
頭がブロックと重なるため、マリオは右にスライドしていきます。
(下キーを押しているとマリオが立たないため押し戻されます)



お気づきの人もいるかもしれませんが、
最小ジャンプなどジャンプ高さ速度を調整することで微調整が出来たりします。
微調整をした結果、悪くなるパターンもあるので注意も必要です。