Xcode 如何自动从其父节点中删除 skspritenode
Posted
技术标签:
【中文标题】Xcode 如何自动从其父节点中删除 skspritenode【英文标题】:how Xcode automatically remove skspritenode form its parent's node 【发布时间】:2014-04-02 12:20:30 【问题描述】:我是 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,但没有任何改变。
我希望我的信息是明确的。如果没有,请告诉我。提前感谢您的回答。
拉斐尔
【问题讨论】:
节点计数是当前可视区域中节点的指示,即必须由 sprite kit 为该帧渲染的节点。 【参考方案1】:我可以看到屏幕上显示的节点计数器:它没有 随着岩石数量的增加而增加。
这是因为 Sprite Kit 默认只计算“渲染”节点(即屏幕上的节点)。要查看剔除的节点,您必须启用一个额外的、未记录的调试标志:
[self.scene.view setValue:@(YES) forKey:@"_showsCulledNodesInNodeCount"];
或者,要获取节点的真实节点数,例如场景,请在要记录节点数的地方添加:
NSLog(@"node count: %u", (unsigned int)self.children.count);
换句话说:如果您不从其父节点移除节点,Sprite Kit 在任何情况下都不会不会自动执行此操作。然而,它会在呈现新场景时清除旧场景的节点图,前提是没有任何保留周期(通常在自定义 SKNode 子类中持有对父节点或兄弟节点的强引用时发现)。
【讨论】:
有没有办法查看总节点数(包括alpha = 0
的节点)?【参考方案2】:
在您订购 SKView 来呈现场景之前,您必须调用这些行:
SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES; // This is what shows the node count.
在 Apple 的文档中,showsNodeCount
属性被描述为:
一个布尔值,指示视图是否显示 场景中的节点可见。
因此,Sprite Kit 不会将它们从父级中移除。如果这些节点回到视图的边界,它们会反过来增加这个节点数。
【讨论】:
以上是关于Xcode 如何自动从其父节点中删除 skspritenode的主要内容,如果未能解决你的问题,请参考以下文章