SKNode removeFromParent иногда удаляет лишних детей
Я обнаружил, что один из моих SKNodes в моей игре удаляет лишних потомков, когда один из его потомков вызывает removeFromParent. Чтобы проверить это, я переопределил removeFromParent и добавил следующее утверждение, которое проверяет, что был удален только один дочерний элемент. Утверждение не выполняется:
- (void) removeFromParent {
SKNode *parent = self.parent;
NSUInteger startingCount = [self.parent.children count];
[super removeFromParent];
if (parent) {
NSAssert([[parent children] count] == startingCount - 1, @"Wrong number of children after removing one child!");
}
}
Я подал отчет об ошибке для этого, но теперь я застрял на нем, потому что у меня нет обходного пути. Мне интересно, сталкивался ли кто-нибудь еще с этим и мог бы иметь обходной путь для этого.
1 ответ
Хорошо, я нашел обходной путь после догадки.
Мои дочерние узлы возвращали YES для isEqual:, хотя они были разными объектами, и я не переопределил isEqual: в моем подклассе SKSpriteNode. Кажется, что реализация removeFromParent использует isEqual:, и когда неравные узлы возвращали YES, он удалял более одного.
Мой обходной путь должен был переопределить isEqual: со следующим:
- (BOOL) isEqual:(id)object {
return self == object;
}