精灵碰撞cocos2d。每帧碰撞

时间:2012-02-12 17:53:42

标签: objective-c cocos2d-iphone

好吧所以我有两个精灵碰撞,'玩家'和'摇滚'这就是我想要的,当发生碰撞时我想要(INT)生命增加+1,所以生活++

然而,每一帧都会发生碰撞!所以(int)生命等于超过100的数字!

每次精灵碰撞时,我如何让(int)生命增加+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

2 个答案:

答案 0 :(得分:1)

如果你想在像你这样的情况下实现某种基本的碰撞检测,你应该做的是管理所有碰撞对的列表;当两个精灵碰撞时,只有当它们不存在时才将它们添加到列表中。

另请查看this post by Ray Wenderlich,虽然所代表的案例与您的情况不相似。

另一种方法是使用chipmunk或Box2D进行碰撞检测。同样,您可以在R.W. site上找到有关后者的教程。

答案 1 :(得分:0)

听起来你希望lives递增但是然后停止递增直到精灵分开并且不再发生碰撞,然后它们再次碰撞并再次增加生命值。

所以只需添加一个变量,这样一旦生命增加,你就会开启BOOL;将此BOOL添加到if条件,以便除非关闭bool,否则生命不会增加。用另一个测试来关闭bool,确定它们相交的时间。

相关问题