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

Cocos2d iphone 看起来,当发生碰撞时,该方法会被调用两次。cocos2d iphone,cocos2d-iphone,game-physics,spritebuilder,Cocos2d Iphone,Game Physics,Spritebuilder,我使用此代码在英雄精灵和敌人精灵碰撞后显示游戏结束菜单: if (CGRectIntersectsRect(_hero.boundingBox,_enemy.boundingBox)) { CCActionCallFunc *_callShowMenu=[CCActionCallFunc actionWithTarget:self selector:@selector(showMenu)]; [self runAction:_callShowMenu]; // EDIT

我使用此代码在英雄精灵和敌人精灵碰撞后显示游戏结束菜单:

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两次,因为 背景是完全黑色的,就像后面有相同的图像一样。有没有人有过类似的问题?大部分背景图像都是半透明的,应该是这样的

编辑:


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

BOOL doNotCallMeTwice;
在didLoad方法中的某个地方:

在碰撞检测方法中:

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

-(void)showMenu{
 doNotCallMeTwice=YES;
}

可能showMenu被调用了两次或更多次,因为冲突检测在更新方法中。

为什么要使用CCActionCallFunc?为什么不直接调用[self\u callShowMenu]呢?您是否验证了它被调用了多少次“被调用两次”很可能是寻找“要解决的问题”的“解决方案”,即黑暗的背景可能是黑暗的,因为你没有预见到的其他合理原因。@YvesLeBorg我只是看不到其他原因,为什么一半transaprent imagenot bade一半transaprent by code会变得不透明。我怀疑这是因为物理原因,可能它发生了两次碰撞,但我在碰撞后立即删除了两个精灵…您是否放置了NSLog跟踪以确定它被多次调用?对不起,我的评论应该是[self showMenu]。
if (doNotCallMeTwice==NO) {
              [self showMenu];
        }
-(void)showMenu{
 doNotCallMeTwice=YES;
}