我正在制作一款2D游戏。 Bitmap创建了很多对象(椭圆形,三角形等)。我要去发现碰撞。现在我只能用这样的矩形来做:
int x, y;
...
if(x>=bmp.getX() && x<=bmp.getX()+bmp.getWidth()
&& y>=bmp.getY() && y<=bmp.getY()+bmp.getHeight()) {
//Collision.
}
但是有一个问题:我不知道如何用另一个图形(椭圆形,三角形等)来做。任何想法将不胜感激。谢谢。
答案 0 :(得分:2)
一个简单的解决方案是使用子矩形来计算碰撞。子矩形不能覆盖整个物体,但它们可以覆盖大部分物体。
这张图片应该说明我的意思,它使用几个矩形进行飞机碰撞检测
另一个选项(虽然不推荐)是使用每像素颜色碰撞,如果三角形中的彩色像素截取椭圆的颜色,则会发生碰撞。请注意,这在计算上很昂贵。
答案 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。
我希望这会有所帮助。