我一直遇到CCMenuItem及其CCCallFunc时序问题。
基本上我得到'EXC_BAD_ACCESS'
@ CCMenuItem类的这一行
-(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
...
[selectedItem_ unselected]; // EXC_BAD_ACCESS
[selectedItem_ activate];
...
}
似乎在触摸结束之前取消分配菜单项。我正在使用CCCallFunc调用'removeThisSprite'方法将其从父
中删除所以我调用CCMenuItem序列的最后一个动作:
[CCCallFuncO actionWithTarget:self selector:@selector(removeThisSprite:) object: _currentButton]
removeThisSprite方法如下:
CCMenuItemSprite2 *sender = nil;
sender.isEnabled = NO;
if ([_sender isKindOfClass:[CCMenuItemSprite class]]) {
sender = _sender;
[sender removeFromParentAndCleanup: YES];
}
这通常发生在玩家通过水龙头“屏蔽”屏幕时,但除非水龙头很快,否则不会发生。这可能发生在我正在制作的游戏中。我猜测玩家按下按钮太快会出现某种时间问题。
答案 0 :(得分:2)
您可以随时尝试延迟删除菜单项:
[self performSelector:@selector(removeMenuItem:) withObject:sender afterDelay:0.1f];
...
-(void) removeMenuItem:(id)sender
{
if ([sender isKindOfClass:[CCMenuItemSprite class]])
{
[sender removeFromParentAndCleanup: YES];
}
}