ゲームで使う斜め移動が45度しか無いならxとyのめり込みの差を比較すれば良い
そんなにきっちりした判定が必要ないなら動かした(戻した)先にブロックが
無ければそこで右下の判定を終らせるって手もある(先に動かした方向が優先されるが)
違う場合色々方法あると思うけど
・移動量(速度)と距離で左辺上辺どっちの境界線を先に越えたか
・移動前座標と移動後の座標の角度を取って移動前右下座標からからブロック左上座標を角度にして大小で上左分ける
・移動前右下と移動先右下の座標を線分としてブロック左上を点として線分と点の判定でどっちの領域に有るかを見る
など
距離と速度の例(割り算使うから0判定してるのがちょっとアレだが・・・)
bx=200//ブロック左
by=200//上
jo_x=bx-40//自機移動前座標左
jo_y=by-50//上
repeat
color
boxf
color 200,200,200
boxf bx,by,bx+31,by+31//ブロック
j_x=mousex//自機左
j_y=mousey//上
jr_x=j_x+31//自機右
jd_y=j_y+31//下
color 0,125,255
line jr_x,j_y,j_x,j_y:line jr_x,jd_y:line j_x,jd_y:line j_x,j_y//自機
jor_x=jo_x+31//自機移動前座標右
jod_y=jo_y+31//下
color 0,255,0
line bx,by,jor_x,jod_y//自機移動前右下からブロック右上のまでのライン
js_x=jo_x-j_x//自機の速度
js_y=jo_y-j_y
d_x=jor_x-bx//自機右下からブロック左上までの距離
d_y=jod_y-by
if js_x!0{xx=absf(double(d_x)/js_x)}//距離を速度で割る
if js_y!0{yy=absf(double(d_y)/js_y)}
color 255,255,255
pos 150,250
mes "xx="+xx
mes "yy="+yy
//小さい方が先に辺の境界線を超えるから違う方の辺にしか当たれない
if (xx>yy) {mes "左"}else{mes "上"}
color 255
line jor_x,jod_y,jr_x,jd_y//自機移動前右下から自機右下までのライン
redraw 1
wait 1
stick lc
if lc=256{//左クリックで移動前左上座標セット
jo_x=mousex
jo_y=mousey
}
redraw 0
loop
これが使えるのは自機が移動前に当たったブロックのどの辺の正面には無く
当たった自機の角とは対角線にあるブロックの角のみ(自機の左下ならブロック右上)