我使用此代码在_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];
}
答案 0 :(得分:0)
我找到了一个使用BOOL的解决方案。实际上在这种情况下每个人都使用BOOL,因此我不需要重新发明轮子。
BOOL doNotCallMeTwice;
didLoad
方法中的某处:
doNotCallMeTwice=NO;
在碰撞检测方法中:
if (doNotCallMeTwice==NO) {
[self showMenu];
}
最后:
-(void)showMenu{
doNotCallMeTwice=YES;
}
可能showMenu
被调用了两次(或更多次),因为碰撞检测在更新方法中。