1

我正在创建一个 2d 游戏。Bitmap 创建了很多对象(椭圆、三角形等)。我要检测碰撞。现在我只能用这样的矩形来做到这一点:

int x, y;
...
if(x>=bmp.getX() && x<=bmp.getX()+bmp.getWidth()
    && y>=bmp.getY() && y<=bmp.getY()+bmp.getHeight()) {
   //Collision.
}   

但是有一个问题:我不知道如何处理另一个图形(椭圆形、三角形等)。任何想法将不胜感激。谢谢你。

4

4 回答 4

2

一个简单的解决方案是使用子矩形来计算碰撞。子矩形将无法覆盖整个对象,但它们可以覆盖其中的大部分。

这张图片应该说明我的意思,它使用几个矩形来检测飞机的碰撞

在此处输入图像描述

另一种选择(尽管不推荐)是使用每像素颜色碰撞,如果三角形中的彩色像素与椭圆的彩色相交,那么就会发生碰撞。请注意,这在计算上是昂贵的。

于 2012-10-01T10:34:06.067 回答
2

1)对于大多数图形,请尝试边缘相交的公式以找到更多尝试,即:
您如何检测两条线段相交的位置?
2)对于圆而不是圆的交点,尝试从圆心到边缘的距离
如何判断线段是否与圆相交?
3)两个圆相交最简单,只需检查两个圆心之间的距离是否小于它们的半径之和

于 2012-10-01T10:41:51.127 回答
0

对于椭圆形,您可以使用:-

if((Math.pow(x, 2) / Math.pow(a, 2)) + (Math.pow(y, 2) / Math.pow(b, 2)) < 1) {
     /** Point (x, y) is inside Oval **/
}

对于Triangle来说,这是一项微不足道的任务:-

访问此链接

于 2012-10-01T10:32:08.173 回答
0

我遇到了和你一样的问题,但是形状不规则。我如何解决问题:

创建一个Shape包含Rectangles.

首次创建游戏对象时,应将 Rectangles 添加到列表中,以便形成 Shape。

现在进行碰撞检测;而不是只检查一个矩形,而是遍历列表中的所有矩形。

我希望这有帮助。

于 2012-10-01T10:44:25.483 回答