Удалите касание из CCSprite с помощью CCTouchDispatcher - PullRequest
1 голос
/ 24 ноября 2011

У меня есть класс, расширенный из CCSprite, который реализует CCTargetedTouchDeledate следующим образом:

@interface PianoKey : CCSprite <CCTargetedTouchDelegate> {

}

Это имеет следующие методы, относящиеся к CCTouchDispatcher:

-(void) onEnter {
    [super onEnter];
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:INT_MIN+1 swallowsTouches:YES];
 }

-(void) dealloc {
    [[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
    [super dealloc];
}

А также имеет стандартные методы CCTouchesBegan и т. Д. Идея состоит в том, чтобы имитировать мультитач, регистрируя каждое фортепиано в диспетчере касания.

Все это прекрасно работает, за исключением случаев, когда я перехожу на новую сцену. Прикосновения к этим клавишам пианино все еще регистрируются и будут иметь приоритет над такими вещами, как пункты меню и т. Д. В новой сцене. Похоже, спрайты не удаляются из CCTouchDispatcher ...

Любая помощь приветствуется!

1 Ответ

3 голосов
/ 24 ноября 2011

Если я правильно помню, [CCTouchDispatcher sharedDispatcher] сохраняет свой делегат, поэтому ваш dealloc никогда не вызывается.вам нужно вызвать [[CCTouchDispatcher sharedDispatcher] removeDelegate:self] в другом месте, чтобы ваш спрайт был правильно освобожден.

обычно делегаты определяются как назначить, это необычное поведение должно быть лучше задокументировано

...