【问题标题】:Check for multiple overlapping sprites检查多个重叠的精灵
【发布时间】:2016-11-13 15:14:01
【问题描述】:

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

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

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

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

但我认为如果我在屏幕上有多个元素(在我的例子中是 3-4 个球),这有点过头了。如何有效地检查它们之间的碰撞?

【问题讨论】:

    标签: c# xamarin game-physics cocossharp


    【解决方案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)));
    }
    

    【讨论】:

    • 谢谢,这为我指明了方向,但这只是告诉我我的一些精灵是重叠的,而不是女巫或有多少,我需要知道这一点才能使相交的精灵产生相应的“弹跳”。我会对此表示赞同,但我无法将其标记为答案。
    • 找出你想要什么的唯一方法是实现一个循环。如果您需要帮助,请告诉我,但循环非常简单
    • 谢谢,我很害怕 :) 我只是想知道有没有其他方法可以做到这一点
    • 也许你可以编写复杂的 LINQ 并获得你需要的列表,但我几乎肯定它会比循环慢。
    猜你喜欢
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多