XY坐标的约束

时间:2012-10-01 10:28:25

标签: java android collision

我正在制作一款2D游戏。 Bitmap创建了很多对象(椭圆形,三角形等)。我要去发现碰撞。现在我只能用这样的矩形来做:

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

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

4 个答案:

答案 0 :(得分:2)

一个简单的解决方案是使用子矩形来计算碰撞。子矩形不能覆盖整个物体,但它们可以覆盖大部分物体。

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

enter image description here

另一个选项(虽然不推荐)是使用每像素颜色碰撞,如果三角形中的彩色像素截取椭圆的颜色,则会发生碰撞。请注意,这在计算上很昂贵。

答案 1 :(得分:2)

1)对于大多数数字,尝试边缘交叉的公式 找到更多尝试ie:How do you detect where two line segments intersect?
2)对于圆与非圆的交点,尝试从圆心到边缘的距离为How to tell if a line segment intersects with a circle?
3)两个圆的交点最简单,只需检查两个中心之间的距离是否小于它们的半径之和

答案 2 :(得分: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 **/
}

对于三角形,这是一项微不足道的任务: -

<强> Visit this link

答案 3 :(得分:0)

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

创建一个包含Shape列表的Rectangles类。

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

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

我希望这会有所帮助。