1

我的 Android 游戏需要像素完美的碰撞检测。我编写了一些代码来检测与“正常”位图(未旋转)的碰撞;工作正常。但是,我不明白旋转位图。不幸的是,Java 没有旋转矩形的类,所以我自己实现了一个。它保存四个角相对于屏幕的位置,并描述其位图的确切位置/图层;称为“项目表面”。我解决检测的计划是:

  1. 检测不同 itemSurfaces 的交集
  2. 计算重叠面积
  3. 相对于其上级 itemSurface/bitmap 设置这些区域
  4. 将每个单个像素与另一个位图的相应像素进行比较

嗯,第一个和第二个都有问题。有人有想法或有一些代码吗?也许 Java/Android 库中已经有代码,但我只是没有找到它。

4

1 回答 1

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,这会花费很长时间并减慢你的游戏速度。我建议您观看视频和相关视频。祝你好运。

于 2012-07-13T18:17:27.520 回答