检查多个重叠的精灵

时间:2016-11-13 15:14:01

标签: c# xamarin game-physics cocossharp

我刚刚开始为手机游戏探索CocosSharp库,并且无法弄清楚是否有更简单的方法来检测屏幕上精灵之间的碰撞。

我已经看过一些关于碰撞的教程,但却无法找到有关多个精灵碰撞的内容。

我创造了简单的三到四个球在屏幕上弹跳,如果它们发生碰撞,我想反弹它们。在教程中,他们使用 BoundingBox.IntersectRect 方法来检测碰撞,但这对于屏幕上的两个元素是好的:

bool doesBallOverlap = ball1.BoundingBoxTransformedToParent.IntersectsRect(ball2.BoundingBoxTransformedToParent);

但是如果我在屏幕上有多个元素,我认为这是一种矫枉过正,在我的情况下是3-4个球。如何有效地检查它们之间的碰撞?

1 个答案:

答案 0 :(得分:1)

来自Check if multiple rectangles intersect

如果你把所有的边界框都当作矩形,你可以使用

bool CheckIfAllIntersect(IEnumerable<Rect> rectangles)
{
    return rectangles.Aggregate(rectangles.FirstOrDefault(), Rect.Intersect) != Rect.Empty;
}


bool CheckIfAnyInteresect(IEnumerable<Rect> rectangles) 
{
    return rectangles.Any(rect => rectangles.Where(r => !r.Equals(rect)).Any(r => r.IntersectsWith(rect)));
}