好吧所以我有两个精灵碰撞,'玩家'和'摇滚'这就是我想要的,当发生碰撞时我想要(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
答案 0 :(得分:1)
如果你想在像你这样的情况下实现某种基本的碰撞检测,你应该做的是管理所有碰撞对的列表;当两个精灵碰撞时,只有当它们不存在时才将它们添加到列表中。
另请查看this post by Ray Wenderlich,虽然所代表的案例与您的情况不相似。
另一种方法是使用chipmunk或Box2D进行碰撞检测。同样,您可以在R.W. site上找到有关后者的教程。
答案 1 :(得分:0)
听起来你希望lives
递增但是然后停止递增直到精灵分开并且不再发生碰撞,然后它们再次碰撞并再次增加生命值。
所以只需添加一个变量,这样一旦生命增加,你就会开启BOOL
;将此BOOL添加到if
条件,以便除非关闭bool,否则生命不会增加。用另一个测试来关闭bool,确定它们不相交的时间。