У меня есть метод, настроенный для удаления спрайта при касании, у меня есть несколько спрайтов, которые нужно удалить, но я показываю только один ниже:
-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {
....
if(CGRectContainsPoint(goalItem.boundingBox, touch)) {
[self removeChild:goalItem cleanup:YES];
}
....
}
Где goalItem это CCSprite, объявленный в заголовке.В основном это вызывает сбой после повторного вызова метода ccTouchEnded .
Я предполагаю, что это потому, что метод ищет goalItem , когда он уже удален, но яя не уверен.
Каков наилучший способ безопасного удаления спрайта и предотвращения путаницы с указателем?
Я очень новичок в cocos2d и target-c, так чтоЯ уверен, что это, вероятно, довольно фундаментальная ошибка: /
ОБНОВЛЕНИЕ:
Я исправил это, создав этот метод:
-(BOOL)checkForGoalSprite:(CGPoint)point {
if([self.children containsObject:goalItem]){
if(CGRectContainsPoint(goalItem.boundingBox, point)){
return YES;
}else {
return NO;
}
}else{
return NO;
}
}
Так что ccTouchEnded читает:
-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {
....
if([self checkForGoalSprite:touch]) {
[self removeChild:goalItem cleanup:YES];
}
....
}
Я уверен, что есть лучший способ ...
ОБНОВЛЕНИЕ:
Я делал основныеошибка использования if else операторов, где я мог бы использовать if операторов, заставляя ccTouchEnded выбрать только один вариант.