FAQ:2Dアクションでのブロック/地形とキャラの当たり判定

「今どき2Dアクションかよw」「ええそうです」
☆☆☆☆☆☆
マリオがブロックに乗ったり横からぶつかったりできるための当たり判定のルーチン、
これは「ブロックとキャラが重なっていたらブロックの外に出す」
だけではまずい場合があります。
たとえば、

自 
 ■

のとき、自(キャラ)が右下へ移動したとき、ブロックの上と左、どちらに出るかという問題があります。
「ブロックと接触したら上に出す」だけのルーチンでは、ブロックに横から当たってもキャラが上に乗っかってしまいます。
これにはわかりやすい解答が二つほどあります。
☆☆☆☆☆☆
一つ目は、ブロックの「面の部分」を線分として考え、キャラが右下に移動する場合は「キャラの右面の線分とブロックの左面の線分」そして「キャラの下面とブロックの上面」がぶつかるかどうかを計算する方法です。
コツは、ブロックが

自■
 ■
■■

のようになっていたときブロックの外側に出ている面だけを判定することです。
たとえば上図「2段目のブロックの上面・右面・下面」は計算に含めないでおくわけです。
この方法だときちんと内部的にも斜めに動いているという利点がある、と思われます。
昔のmg2開発日誌のさらに昔にテスト版をアップロードしたことがありましたが、あれはそういうルーチンでした。
☆☆☆☆☆☆
もう1つは、キャラを動かすのをy方向とx方向それぞれ別にやる方法です。
まずy方向にキャラ速度分だけ移動させ、その処理の後、x方向に速度分移動させます。
斜め移動が内部的には直角に曲がっているわけです。
肝心のブロックの当たり判定ですが、
y方向へ移動させるとき、「1ドットずつ」動かし、動いた先がブロックに当たっていたら止めればいいです。
利点は……コードがわかりやすいってことでしょうか。
今回また書き始めたのはこっちを使ってます。
直角に動くのがどうしてもイヤなら線分との当たり判定の方がいいかもしれません。