0

CCMenuItem 및 CCCallFunc의 타이밍 문제가 발생했습니다.cocos2d 도움 : CCMenuItem 선택되지 않은 'EXC_BAD_ACCESS'및 CCCallFunc

는 기본적으로 나는 CCMenuItem 클래스

-(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    ... 
    [selectedItem_ unselected]; // EXC_BAD_ACCESS 
    [selectedItem_ activate]; 
    ... 
} 

이 라인 @ 'EXC_BAD_ACCESS'

받고 있어요 터치가 종료되기 전에 메뉴 항목이 해제되는 것 같다. 나는

이 때문에 CCMenuItem 시퀀스의 마지막 작업은 내가 전화를 부모에서 그것을 제거하는 'removeThisSprite'메소드를 호출하는 CCCallFunc을 사용하고 있습니다 :

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

이것은 일반적으로 플레이어가 도청으로 화면을 스팸하면 발생하지만 도청이 빠르지 않는 한 발생하지 않습니다. 내가하고있는 게임에서 어떤 일이 일어날 것인가. 나는 플레이어가 버튼을 너무 빨리 누르는 것과 같은 타이밍 문제가 있다고 생각합니다.

답변

2

당신은 항상 시도하고 메뉴 항목의 제거를 지연시킬 수 있습니다 :

[self performSelector:@selector(removeMenuItem:) withObject:sender afterDelay:0.1f]; 

... 

-(void) removeMenuItem:(id)sender 
{ 
    if ([sender isKindOfClass:[CCMenuItemSprite class]]) 
    { 
     [sender removeFromParentAndCleanup: YES]; 
    } 
} 
관련 문제