看来,当碰撞发生时,该方法被调用两次。的cocos2d-iphone

时间:2014-08-04 13:18:48

标签: cocos2d-iphone game-physics spritebuilder

我使用此代码在_hero精灵和_enemy精灵碰撞后显示游戏菜单:

if (CGRectIntersectsRect(_hero.boundingBox,_enemy.boundingBox)) {
    CCActionCallFunc *_callShowMenu=[CCActionCallFunc actionWithTarget:self selector:@selector(showMenu)];
    [self runAction:_callShowMenu];

   // EDIT : I also remove both sprites when collision happens.

   [_hero removeFromParent];
   [_enemy removeFromParent];
}

_callShowMenu我只是停止所有动作,并显示一个带有半透明黑色背景图像和按钮的精灵。 有时碰撞发生时,在我看来,_callShowMenu被调用两次,因为 背景是完全黑色的,就像背后有相同的图像。有人有过类似的问题吗? (主要是背景图像应该是半透明的。)

编辑:

-(void)showMenu{
   [[CCDirector sharedDirector] pause];
    CCSprite *_halfTransparentBackground=[CCSprite spriteWithImageNamed:@"halfTransparentBackground.png"];
    _halfTransparentBackground.position=ccp(160, 280);
    [self addChild:_blackBack z:5]; 


}

1 个答案:

答案 0 :(得分:0)

我找到了一个使用BOOL的解决方案。实际上在这种情况下每个人都使用BOOL,因此我不需要重新发明轮子。

BOOL doNotCallMeTwice;

didLoad方法中的某处:

 doNotCallMeTwice=NO;

在碰撞检测方法中:

if (doNotCallMeTwice==NO) {
              [self showMenu];
        }

最后:

-(void)showMenu{
 doNotCallMeTwice=YES;
}

可能showMenu被调用了两次(或更多次),因为碰撞检测在更新方法中。