检查多个重叠的精灵

本文关键字:精灵 重叠 检查 | 更新日期: 2023-09-27 18:17:37

我刚刚开始探索手机游戏的CocosSharp库,不知道是否有更简单的方法来检测屏幕上精灵之间的碰撞。

我看过一些关于碰撞的教程,但找不到关于多个精灵碰撞的东西。

我正在创建简单的3到4个在屏幕上弹跳的球,如果它们碰撞,我想让它们弹跳起来。在教程中,他们使用BoundingBox。IntersectRect方法用于检测碰撞,但这对于屏幕上的两个元素是Ok的:

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

但我认为如果我在屏幕上有多个元素,在我的例子中是3-4个球,这是一个过度杀伤。如何有效地检查它们之间的冲突?

检查多个重叠的精灵

From检查是否有多个矩形相交

如果所有的边界框都是矩形那么你可以这样使用

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)));
}