2013-02-11 70 views
0

我對場景產生隨機精靈與隨機位置,像這樣防止與隨機位置的精靈:重疊在cocos2d

-(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個sprites。我的問題是,在精靈的隨機X軸位置。我這樣做是爲了讓它們定位在130到240之間的任何位置。然而,這是有效的,因爲x軸是隨機的,所以存在兩個或更多個精靈彼此重疊的趨勢。所以我現在的問題是,我如何防止精靈重疊?

回答

0

我可以建議兩種方法:

  1. 碰撞檢測:添加新的精靈之前,檢查其邊界不與任何其他現有的精靈相交;

,以減少檢查兩個界限是否發生碰撞的複雜性,你可以做到以下幾點:

  1. 離散的空間:定義一個網格;然後將隨機座標分配給此網格中的精靈;計算整個空間中指定的網格單元格的座標。例如,假設你的精靈是20x40,你的空間是320x480,那麼你可以使用16x12的網格;如果將一個精靈分配給單元格(3,3​​),則這將對應於(60,120)。在這種情況下,只需比較它們的座標就可以檢測到兩個精靈之間的碰撞。
0

有一個代碼段由發佈timTheMysticthis後。雖然不是一個好的,但仍然是一個可以接受的解決方案,以防止精靈之間的重疊。