Che*_*tan 3 java collision-detection
我正在开发一种游戏,其中我有运动图像的碰撞检测问题.游戏中有一个宇宙飞船和一些小行星(障碍物).我想检测它们之间的碰撞.我怎样才能做到这一点?
pax*_*blo 14
对于除矩形之外的任何事物,碰撞检测通常都很棘手.
我过去这样做的方法是为每个对象提供图像和掩码.因此,例如,像Lost in Space中的Jupiter 2太空船这样的物体将具有以下图像和掩模:
X 00000100000
XXXXXXX 00111111100
X X 01111111110
X X 11111111111
X X 01111111110
XXXXXXX 00111111100
XXX 00001110000
Run Code Online (Sandbox Code Playgroud)
该图像是什么获取blatted的屏幕,但面具是什么用于碰撞检测.您会注意到蒙版中的1基本上是图像的轮廓和内容.
检测碰撞的方式:
这考虑了"接近未命中",其中每个对象的边界矩形重叠但不一定是对象轮廓本身.按位运算符是检测此问题的有效方法.
这是一个箭头没有碰到气球的例子 - 在我的图形设计技巧之前颤抖:
....xx....
..xx..xx..
.x......x.
.x......x.
x........x
x........x
.x......x.
.x......x.
..xx..xx..
....xx.**y.....
.y......
yyyyyyyy
.y......
..y.....
Run Code Online (Sandbox Code Playgroud)
你可以看到,即使矩形重叠(见**y),箭头实际上也没有与气球接触.通过对掩码应用按位AND运算,这些位将最终为零,从而导致非冲突.
@kyoryu在他的评论中提出了一个有趣的观点.有些游戏很适合用较小的矩形组成对象,你可以根据矩形组件简化碰撞检测(不必担心像素完美).例如,我们的老朋友太空入侵者(实际上是该游戏中对抗太空入侵者的防守者)可能由两个矩形组成,X和Y,导弹由Z制成:
YYYY .Z.
YYYY .Z.
XXXXXXXXXXXX .Z.
XXXXXXXXXXXX ZZZ
XXXXXXXXXXXX .Z.
XXXXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)
这可以归结为对两个太空入侵者矩形的导弹的简单矩形检查 - 考虑到导弹的大小,即使你联系其中一个.角色,你也可能把它称为碰撞(考虑它们是近距离导弹而不是影响变化).