检查多个重叠的精灵
Check for multiple overlapping sprites
我刚刚开始探索用于手机游戏的 CocosSharp 库,不知道是否有更简单的方法来检测屏幕上精灵之间的碰撞。
我看过一些关于碰撞的教程,但找不到关于多个精灵碰撞的内容。
我正在创建简单的三到四个在屏幕上弹跳的球,如果它们发生碰撞,我想弹回它们。在教程中,他们使用 BoundingBox.IntersectRect 方法来检测碰撞,但这对于屏幕上的两个元素是可以的:
bool doesBallOverlap = ball1.BoundingBoxTransformedToParent.IntersectsRect(ball2.BoundingBoxTransformedToParent);
但我认为如果我在屏幕上有多个元素,在我的例子中有 3-4 个球,这就太过分了。我怎样才能有效地检查它们之间的碰撞?
来自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)));
}
我刚刚开始探索用于手机游戏的 CocosSharp 库,不知道是否有更简单的方法来检测屏幕上精灵之间的碰撞。
我看过一些关于碰撞的教程,但找不到关于多个精灵碰撞的内容。
我正在创建简单的三到四个在屏幕上弹跳的球,如果它们发生碰撞,我想弹回它们。在教程中,他们使用 BoundingBox.IntersectRect 方法来检测碰撞,但这对于屏幕上的两个元素是可以的:
bool doesBallOverlap = ball1.BoundingBoxTransformedToParent.IntersectsRect(ball2.BoundingBoxTransformedToParent);
但我认为如果我在屏幕上有多个元素,在我的例子中有 3-4 个球,这就太过分了。我怎样才能有效地检查它们之间的碰撞?
来自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)));
}