CCSprite по-прежнему реагирует на прикосновения даже после того, как он удален из родительского и очищен - PullRequest
0 голосов
/ 12 февраля 2012

У меня есть собственный подкласс CCSprite, и в нем я делаю это:

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:-1 swallowsTouches:YES];

во время пользовательской инициализации спрайта.

Очень интересно, даже когда я сделаю это позже, из основного класса сцены, который его контролирует:

[customSprite removeFromParentAndCleanup:YES];

Спрайт все еще отвечает на этот метод в своем классе:

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event

очень любопытно!

У меня изначально этого не было, но я добавил его в класс пользовательских спрайтов, и это не имело никакого значения:

-(void)dealloc{
    [super dealloc];
}

Есть идеи, что здесь происходит?

ОБНОВЛЕНИЕ: не уверен, что это актуально, но мне интересно, если removeFromParentAndCleanup работает на спрайте, который добавляется в пакет спрайтов, так как мой спрайт действительно является частью CCSpriteBatchNode

Ответы [ 2 ]

0 голосов
/ 12 февраля 2012

CCTouchDispatcher сохранит ваш спрайт. Вам нужно вызвать [[CCTouchDispatcher sharedDispatcher] removeDelegate:self]; при удалении спрайта.

0 голосов
/ 12 февраля 2012

попробуйте это:

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

- (void) onExit{
    [[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
    [super onExit];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...