2012-02-12 122 views
0

行,所以我有兩個精靈相撞,「播放器」和「搖滾」這就是我想要什麼,什麼時候發生碰撞,我想(INT)生活+1遞增所以住++sprite碰撞cocos2d。每幀碰撞

但是一碰撞發生在每一幀!所以(int)的生命值等於100以上的數字!

我怎樣才能使(int)生命每增加一次sprite就會增加+1?不是每一幀他們碰撞?

這裏是我用過

- (void)update:(ccTime)dt { 
    [livesLabel setString:[NSString stringWithFormat:@"%i", lives]]; 

    CGRect playerRect = CGRectMake(
            player.position.x - (player.contentSize.width), 
            player.position.y - (player.contentSize.height), 
            player.contentSize.width, 
            player.contentSize.height); 

    for (CCSprite *rock in rockArray) 
    { 
     CGRect rockRect = CGRectMake(
            rock.position.x - (rock.contentSize.width), 
            rock.position.y - (rock.contentSize.height), 
            rock.contentSize.width, 
            rock.contentSize.height); 

     if (CGRectIntersectsRect(playerRect, rockRect)) 
     { 
      lives++; 
     }      
    } 
} 

上面的代碼時,「搖滾」和球員發生衝突的代碼,生活是1

回答

1

是增量。如果你想實現某種基本的碰撞在類似你的情況下檢測,你應該做的是管理所有碰撞對的列表;當兩個精靈發生碰撞時,只有當它們不在那裏時纔會將它們添加到列表中。

也看看this post by Ray Wenderlich,雖然案件代表不類似於你的情況。

另一種方法是使用花栗鼠或Box2D僅用於碰撞檢測。再次,您可以在R.W. site上找到關於後者的教程。

0

聽起來像你想要lives增加,但然後停止增加,直到精靈分離,不再碰撞,然後他們再次碰撞,並再次增加生活。

所以,只需添加一個變量,以便一旦生命增加,就可以打開BOOL;將此BOOL添加到您的if條件中,以便除非布爾關閉,否則不會增加生命。用另一個測試關掉布爾,確定它們何時是而不是相交。

+0

謝謝,我似乎對你的說法略有理解,你有可能用代碼展示一個例子嗎? – sahil 2012-02-13 14:49:45