【问题标题】:sprite collision cocos2d. collision per frame精灵碰撞 cocos2d。每帧碰撞
【发布时间】:2012-03-04 07:13:16
【问题描述】:

好的,所以我有两个精灵碰撞,“玩家”和“摇滚”这就是我想要的,当发生碰撞时,我希望 (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++;  
        }                       
    }
}

上面的代码是当'rock'和玩家碰撞时,生命值增加1

【问题讨论】:

    标签: objective-c cocos2d-iphone


    【解决方案1】:

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

    也可以看看this post by Ray Wenderlich,尽管所代表的情况与你的情况不同。

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

    【讨论】:

      【解决方案2】:

      听起来你想让lives 增加,然后停止增加,直到精灵分开并且不再碰撞,然后它们再次碰撞并再次增加生命。

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

      【讨论】:

      • 谢谢,我好像对你说的有点理解,有没有机会用代码举例说明一下?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多