我的Android游戏需要像素完美的碰撞检测。我写了一些代码来检测与“正常”位图的碰撞(未旋转);工作良好。但是,我没有得到旋转位图。不幸的是,Java没有旋转矩形的类,所以我自己实现了一个。它保持四个角相对于屏幕的位置,并描述其位图的确切位置/层;称为“itemSurface”。我解决检测的计划是:
好吧,我遇到了第一个和第二个问题。有人有想法或得到一些代码吗?也许Java / Android库中已有代码,我只是没找到它。
答案 0 :(得分:0)
据我所知,您希望在矩形之间进行碰撞检测(以不同方式旋转)。您无需计算重叠区域。而且,比较每个像素都是无效的。
实现一个static boolean isCollision
函数,该函数将告诉您一个矩形与另一个矩形之间是否存在冲突。在你拿一张纸之前,先做几何几何来找出确切的公式。出于性能原因,不要在一些Rectangle类中包装一个矩形,只需使用像双精度等原始类型。
然后(伪代码):
for (every rectangle a)
for (every rectangle b)
if (a != b && isCollision(a, b))
bounce(a, b)
这是O(n ^ 2),其中n是矩形的数量。如果您需要更高的性能,有更好的算法。 bounce
函数改变移动矩形的向量,以便模仿碰撞。如果物体的重量相同(你可以将重量与矩形的大小相近),你只需要交换两个速度矢量。
要正确弹跳元素,您可能需要存储辅助表boolean alreadyBounced[][]
以确定哪些矩形在弹跳(碰撞)后不需要更改其向量,因为它们已经被弹回。
还有一个提示:
如果您在Android下制作游戏,则必须注意在游戏过程中不要分配内存,因为它会更快地调用GC,这会花费很长时间并减慢游戏速度。我建议您观看this视频和相关内容。祝你好运。