防止随机位置的精灵在cocos2d中重叠

时间:2013-02-11 10:13:19

标签: objective-c cocos2d-iphone

我在具有随机位置的场景上生成随机精灵:

-(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轴是随机的,存在两个或更多个精灵彼此重叠的趋势。所以现在我的问题是,如何防止精灵重叠?

2 个答案:

答案 0 :(得分:0)

我可以建议两种方法:

  1. 碰撞检测:在添加新精灵之前,检查其边界是否与任何其他现有精灵相交';
  2. 为了降低检查两个边界是否发生冲突的复杂性,您可以执行以下操作:

    1. 离散你的空间:定义一个网格;然后将随机坐标分配给此网格中的精灵;计算整个空间中指定网格单元的坐标。例如,假设你的精灵是20x40而你的空间是320x480,那么你可以使用16x12网格;如果你将精灵分配给单元格(3,3​​),这将对应于(60,120)。在这种情况下,您只需比较它们的坐标就可以检测到两个精灵之间的碰撞。

答案 1 :(得分:0)

this帖子中有 timTheMystic 发布的代码段。虽然不是一个好的,但仍然是一个可以接受的解决方案,以防止精灵之间的重叠。