回転しない矩形同士の衝突判定サンプルです。
世界でも最もポピュラーじゃないんでしょうか?
最近はあんまり使ってないですね。
;===========================================================
; 2007/10/25
; 矩形の衝突判定モジュール ver.0.1.0
; GAM-22
;===========================================================
if 0 {
#defcfunc chk_box int ax, int ay, int axs, int ays, int bx, int by, int bxs, int bys
;-----------------------------------------------------------
; 矩形同士の交差判定
;-----------------------------------------------------------
;
; p1,p2 : 矩形Aの座標
; p3,p4 : 矩形Aのサイズ
; p5,p6 : 矩形Bの座標
; p7,p8 : 矩形Bのサイズ
;-----------------------------------------------------------
return (ax+axs>=bx) & (bx+bxs>=ax) & (ay+bys>=by) & (by+bys>=ay)
}
cxm = 1
cym = 1
repeat
redraw 0
; 背景
color 255,255,255 : boxf
; 矩形A
color ,,255
boxf mousex,mousey, mousex+32,mousey+32
; 円B
color 255
boxf cx,cy, cx+64,cy+64
cx += cxm
cy += cym
if cx<=0 | cx>=576 : cxm *= -1
if cy<=0 | cy>=416 : cym *= -1
; 判定
if chk_box(mousex,mousey,32,32, cx,cy,64,64) {
pos 0,0 : mes "当たってる"
}
redraw
await 5
loop
戦車とかで、回転する矩形を判定したいなら
線分判定を組み合わせれば良いと思います。
実装した例 :
Battle Armor
どうせなら、多角形に対応するとベスト(?)。
PR