旋转像素完美碰撞检测

Posted

技术标签:

【中文标题】旋转像素完美碰撞检测【英文标题】:Rotational Pixel-Perfect Collision Detection 【发布时间】:2011-12-10 14:18:43 【问题描述】:

所以我正在开发一款 android 游戏,屏幕上有两张图片。我目前的像素完美碰撞检测效果很好。我的问题是当我旋转其中一张图像并检查像素是否发生碰撞时。像素仍然以加载图像的原始方式定向,所以它不像以前那么完美......我可以得到一个数组或二维数组中的所有像素。但我目前只是通过Bitmap 类中的getPixel(x, y) 方法访问它们。

有谁知道基于任意度数旋转数组中的值的算法?或者有什么其他方法可以解决这个问题?

【问题讨论】:

您确定您访问的是旋转图像的像素而不是原始图像吗? 嗯,我正在考虑这个问题,但是当我一开始加载位图时,我很确定它会存储一次像素,但不会在旋转时更新它们。我什至尝试使用 getPixels()setPixels() 轮换方法手动更新它们。 【参考方案1】:

你看过AffineTransform吗?

这是我过去用来旋转精灵和图像的方法。

【讨论】:

我认为这会奏效。我只需要导入 java.awt 即可使用它......正如我在另一条评论中所说,Android 不支持它。我想我会四处寻找这个想法,看看我是否能想出一种方法来实现它。 您可以使用Matrix 代替AffineTransform。请参阅How to map java's AffineTransform to Android's Matrix 了解更多信息。【参考方案2】:

我使用此代码旋转并从图像中获取像素值:

Image rotatedImage = new BufferedImage(imageToRotate.getHeight(null), imageToRotate.getWidth(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = (Graphics2D) rotatedImage.getGraphics();
// Set rotation here
g2d.rotate(Math.toRadians(90.0));
g2d.drawImage(imageToRotate, 0, -rotatedImage.getWidth(null), null);
g2d.dispose();
int pixelColor = ((BufferedImage)rotatedImage).getRGB(x, y);

【讨论】:

这需要我导入 java.awt 库,因为 Android 不支持它,而且我认为我不需要这么多开销。我认为 Android 的 Bitmap 类与 BufferedImage 相同,我认为 Graphics2D 类类似于 android Canvas。嗯...我会调查的。

以上是关于旋转像素完美碰撞检测的主要内容,如果未能解决你的问题,请参考以下文章

碰撞检测 (矩形圆形点旋转矩形框像素)

ActionScript 3 像素完美碰撞检测AS3

C++ 2D 像素完美碰撞检测库?

“等一下,我碰!”——常见的2D碰撞检测

actionscript 2 碰撞检测

PyQt5 像素级碰撞检测