>>416
一つのやり方として
前回の座標を保存しといて、ブロックと衝突したら前回と、今回の座標から
どの方向から衝突して、どの面に接触したかを判別する。

簡単な方法として前回のキャラの判定領域がブロック判定領域のx、yどちらかに
重なっているか、両方重なっていないで分けて、

前回xが重なってるならy軸の移動は出来ない>下に移動中なら上に上に移動中ならブロックの下に合わせる
前回yが重なってるならx軸の移動は出来ない>右に移動中なら左に左に移動中ならブロックの右に合わせる

両方重なっていない場合
前回の位置が左上ならブロックの左か上にしか触れない>当たった場所がブロックの中心から左、上側の離れている(*1)方に合わせる
斜め45度の場合距離は同じなので優先度を決めておく

このまま実装すると、キャラのスピードや、一度に二つ以上接触した時の処理順序などで、色々不都合が出ると思う
でも、これ以上は作るゲームによって変わってくるので、色々やってみてくれ

(*1、中心からの距離の比較だけで見るとゲームとして厳しい場合は半分より上なら上に載せるとかやってもいいと思う)