Android上旋转位图的冲突检测

Android上旋转位图的冲突检测,android,detection,pixel-perfect,Android,Detection,Pixel Perfect,我需要像素完美的碰撞检测为我的Android游戏。我写了一些代码来检测与未旋转的普通位图的冲突;很好。但是,对于旋转位图,我没有得到它。不幸的是,Java没有用于旋转矩形的类,所以我自己实现了一个。它保持四个角相对于屏幕的位置,并描述位图的确切位置/图层;称为itemSurface。我解决检测问题的计划是: 检测不同曲面的交点 计算重叠面积 根据其上级项目表面/位图设置这些区域 将每个像素与其他位图的对应像素进行比较 嗯,第一个和第二个都有问题。有人有想法或有代码吗?可能Java/Android

我需要像素完美的碰撞检测为我的Android游戏。我写了一些代码来检测与未旋转的普通位图的冲突;很好。但是,对于旋转位图,我没有得到它。不幸的是,Java没有用于旋转矩形的类,所以我自己实现了一个。它保持四个角相对于屏幕的位置,并描述位图的确切位置/图层;称为itemSurface。我解决检测问题的计划是:

检测不同曲面的交点 计算重叠面积 根据其上级项目表面/位图设置这些区域 将每个像素与其他位图的对应像素进行比较
嗯,第一个和第二个都有问题。有人有想法或有代码吗?可能Java/Android libs中已经有代码了,我只是没有找到它。

我知道您希望在以不同方式旋转的矩形之间进行碰撞检测。您不需要计算重叠区域。此外,比较每个像素将是无效的

实现一个静态布尔isCollision函数,该函数将告诉您一个矩形和另一个矩形之间是否存在冲突。在你拿一张纸之前,先做一些几何,找出精确的公式。出于性能原因,不要在某个矩形类中包装矩形,只需使用基本类型,如double等

然后伪代码:

for (every rectangle a)
  for (every rectangle b)
    if (a != b && isCollision(a, b))
      bounce(a, b)  
这是在^2上,其中n是矩形数。如果您需要更高的性能,有更好的算法。bounce函数更改移动矩形的向量,以模拟碰撞。如果对象的权重相同,则可以使用矩形的大小近似权重,只需交换两个速度向量

要正确反弹元素,您可能需要存储辅助表布尔值alreadyBounced[]],以确定哪些矩形在反弹碰撞后不需要更改其向量,因为它们已被反弹

还有一个提示:


如果你在安卓系统下制作游戏,你必须注意不要在游戏过程中分配内存,因为它会更快地调用GC,这需要很长时间,并会降低游戏速度。我建议你看视频和相关的。祝你好运。

问题是我使用的位图是部分透明的。这就是为什么我必须比较每一个像素来完成讨论会看起来真实的原因。需要重叠区域来知道必须比较位图的哪些像素。如果有更有效的方法,请纠正我。此外,精确的公式是我的主要问题:D。我已经找了好几个小时了。我希望有人已经知道一个算法。PS:非常感谢您的提示: