0

我发现我的游戏中的一个 SKNode 在其中一个孩子调用 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!");
}

}

我已经为此提交了一个错误报告,但我现在坚持下去,因为我没有解决方法。我想知道是否有其他人遇到过这种情况并且可能有解决方法。

4

1 回答 1

0

好的,我根据预感找到了解决方法。

我的子节点为 isEqual: 返回 YES,即使它们是不同的对象并且我没有在我的 SKSpriteNode 子类中覆盖 isEqual:。似乎 removeFromParent 的实现使用了 isEqual:,当不相等的节点返回 YES 时,它正在删除多个。

我的解决方法是使用以下内容覆盖 isEqual::

- (BOOL) isEqual:(id)object {
    return self == object;
}
于 2014-08-04T21:53:44.757 回答