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;
}
Другие вопросы по тегам