0

我在具有随机位置的场景上生成随机精灵,如下所示:

-(void)addWRight
{
int randNo = arc4random()%5;
int randType = arc4random()%3;

for(int i = 0; i <= randNo; i++)
{
    NSString *strSprite = @"1.png";
    if(randType == 0)
    {
        strSprite = @"1.png";
    }
    else if(randType == 1)
    {
        strSprite = @"2.png";
    }
    else
    {
        strSprite = @"3.png";
    }

    int minX = 130; 
    int maxX = 240; 
    int randX = arc4random() % (maxX - minX) + minX;

    CCSprite *spr = [CCSprite spriteWithFile:strSprite];
    spr.position = ccp(randX, 200);
    [self addChild:spr];
    [whiteArray addObject:spr];
}}

我根据 randNo 的结果添加精灵。因此,例如,如果 randNo 值为 2,则将添加 3 个精灵。我的问题是,在精灵的随机 x 轴位置上。我这样做是为了让它们位于 130 - 240 之间的任何位置。但是,这是可行的,因为 x 轴是随机的,因此存在两个或多个精灵相互重叠的趋势。所以我现在的问题是,如何防止精灵重叠?

4

2 回答 2

0

我可以建议两种方法:

  1. 碰撞检测:在添加新精灵之前,检查其边界是否与任何其他现有精灵相交;

为了降低检查两个边界是否碰撞的复杂性,您可以执行以下操作:

  1. 离散化你的空间:定义一个网格;然后在这个网格中为你的精灵分配随机坐标;计算整个空间中指定网格单元的坐标。例如,假设你的精灵是 20x40,你的空间是 320x480,那么你可以使用 16x12 的网格;如果将精灵分配给单元格 (3,3),则对应于 (60,120)。在这种情况下,您将仅通过比较它们的坐标来检测两个精灵之间的碰撞。
于 2013-02-11T10:17:51.470 回答
0

timTheMystic这篇文章中发布了一段代码片段。虽然不是很好,但仍然是防止精灵之间重叠的可接受的解决方案。

于 2014-03-11T12:08:24.403 回答