2

我是 objectif-c 和 sprite-kit 开发的新手(但不是编程)。所以我开始了Apple的Spri。该应用程序运行良好,除了代表岩石的节点会在岩石从场景底部落下时自动从其父节点中移除。这在没有实现 -(void)didSimulatedPhysics 方法的情况下:

- (void)didSimulatedPhysics
{
  [self enumerateChildNodesWithName:@"rock" usingBlock:^(SKNode *node, BOOL *stop) {
    if (node.position.y < 0)
      [node removeFromParent];
  }];
}

我可以看到屏幕上显示的节点计数器:它不会随着岩石的数量而增加。所以我的问题是:Xcode 是否为我的程序管理 removeFromParent 方法?如果是的话,你能告诉我禁用的选项吗?我尝试将 ARC 设置为 NO,但它没有任何改变。

我希望我的信息是明确的。如果没有,请告诉我。提前感谢您的回答。

拉斐尔

4

2 回答 2

5

我可以看到屏幕上显示的节点计数器:它不会随着岩石的数量而增加。

这是因为 Sprite Kit 默认只计算“渲染”节点(即屏幕上的节点)。要查看剔除的节点,您必须启用一个额外的、未记录的调试标志:

[self.scene.view setValue:@(YES) forKey:@"_showsCulledNodesInNodeCount"];

或者,要获取节点(例如场景)的真实节点计数,请将其添加到要记录节点计数的位置:

NSLog(@"node count: %u", (unsigned int)self.children.count);

换句话说:如果您不从其父节点中删除节点,Sprite Kit在任何情况下都不会自动执行此操作。然而,它会在呈现新场景时清除旧场景的节点图,前提是没有任何保留周期(通常在自定义 SKNode 子类中持有对父节点或兄弟节点的强引用时发现)。

于 2014-04-02T12:43:43.843 回答
0

在命令 SKView 呈现场景之前,您必须调用这些行:

SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES; // This is what shows the node count.

从 Apple 的文档中,该showsNodeCount属性被描述为:

一个布尔值,指示视图是否显示场景中可见节点的计数。

因此,Sprite Kit 不会将它们从父级中删除。如果这些节点要回到视图的边界,它们会反过来增加这个节点数。

于 2014-04-02T12:47:50.083 回答