Справка по cocos2d: CCMenuItem не выбрал «EXC_BAD_ACCESS» и CCCallFunc - PullRequest
0 голосов
/ 23 ноября 2011

У меня были проблемы с 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];
}

Это обычно происходит, когда игрок «спамит» экран касаниями, но не происходит, если касания не быстрые.Что может произойти с игрой, которую я делаю.Я предполагаю, что есть какая-то проблема с синхронизацией, когда игроки слишком быстро нажимают на кнопку.

1 Ответ

2 голосов
/ 23 ноября 2011

Вы всегда можете попробовать и отложить удаление пункта меню:

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

...

-(void) removeMenuItem:(id)sender
{
   if ([sender isKindOfClass:[CCMenuItemSprite class]])
   {
      [sender removeFromParentAndCleanup: YES];
   }
}
...