こんばんは
ドット単位での当たり判定、
HSPDXではないですけどサンプルを作ってみました。
HSPDXで使うにはちょっと工夫がいると思います……。
文字の白い部分が接触すると、タイトルに「HIT!」が表示されます。
screen 1, 128, 64
cls 4
color 255, 255, 255
font msgothic, 64
mes "八十"
gsel 0
px = 100 : py = 100
ex = 200 : ey = 100
*main
stick k, 15
if k & 1 : px -= 1
if k & 2 : py -= 1
if k & 4 : px += 1
if k & 8 : py += 1
res = 0
; まずは画像の矩形で判定
if px < ex + 64 and px + 64 > ex and py < ey + 64 and py + 64 > ey {
; 接触している矩形の幅と高さを求める
w = 64 - abs(px - ex)
h = 64 - abs(py - ey)
; 自分の画像データでの読み出し開始点を求める
psx = limit(ex - px, 0, 63)
psy = limit(ey - py, 0, 63)
; 相手の 〃
esx = limit(px - ex, 0, 63)
esy = limit(py - ey, 0, 63)
gsel 1
repeat w
x = cnt
repeat h
y = cnt
pget psx + x, psy + y
if ginfo_r {
y = cnt
pget 64 + esx + x, esy + y
if ginfo_r {
res = 1
break
}
}
loop
if res : break
loop
gsel 0
}
; 白い部分が当たっていた場合はHIT!を表示
if res {
title "HIT!"
} else {
title "カーソルキーで移動します"
}
redraw 0
color 0, 0, 0 : boxf
gmode 2, 64, 64
pos px, py
gcopy 1, 0, 0
pos ex, ey
gcopy 1, 64, 0
redraw 1
await 16
goto *main
動きを重くしないように、最初に矩形同士で判定してます。
そのあと、実際にふたつの画像が重なっている範囲のなかで
透明色ではない部分が重なっているかどうかを見てます。
キャラクターがふたりしかいないから重くなっていないだけかも知れませんが…。
pgetよりも、当たり判定用の配列を作っておく方が、動作が早いかも知れませんー
…自分のゲームにも組み込んでみようかな(´・ω
ではでは、ゲーム作り頑張ってください〜^^