円同士の衝突判定のサンプルです。
高速で簡単なので、お気に入りです。
;===========================================================
; 2007/10/24
; 円の衝突判定モジュール ver.0.1.0
; GAM-22
;===========================================================
if 0 {
#defcfunc chk_circle int ax, int ay, int ar, int bx, int by, int br
;-----------------------------------------------------------
; 円同士の交差判定
;-----------------------------------------------------------
;
; p1,p2 : 円Aの座標
; p3 : 円Aの半径
; p4,p5 : 円Bの座標
; p6 : 円Bの半径
;-----------------------------------------------------------
; 絶対値に変換するのは、巨大な足し算するとマイナスになって困るから
return abs((ax-bx)*(ax-bx) + (ay-by)*(ay-by)) <= (ar+br)*(ar+br)
#deffunc circle2 int x, int y, int r
;-----------------------------------------------------------
; 円を描画
;-----------------------------------------------------------
;
; p1,p2 : 中心座標
; p3 : 半径
;-----------------------------------------------------------
circle x-r,y-r, x+r,y+r
return
}
cxm = 1
cym = 1
cx = 320
cy = 240
repeat
redraw 0
; 背景
color 255,255,255 : boxf
; 円A
color ,,255
circle2 mousex,mousey, 32
; 円B
color 255
circle2 cx,cy, 64
cx += cxm
cy += cym
if cx<=64 | cx>=576 : cxm *= -1
if cy<=64 | cy>=416 : cym *= -1
; 判定
if chk_circle(mousex,mousey,32, cx,cy,64) {
pos 0,0 : mes "当たってる"
}
redraw
await 5
loop
PR