2012-02-12 119 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