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;
}