self.addChild 做啥?

Posted

技术标签:

【中文标题】self.addChild 做啥?【英文标题】:What does self.addChild Do?self.addChild 做什么? 【发布时间】:2017-04-08 04:09:54 【问题描述】:

这是一个愚蠢的问题,但函数self.addChild() 有什么作用?

我熟悉这个功能,以及如何使用它,但我不确定它将孩子添加到什么。

例如,我创建并设计了一个名为spinnyNodeSKShapeNode。然后我调用函数:

func touchDown(atPoint pos : CGPoint) 
    if let n = self.spinnyNode?.copy() as! SKShapeNode? 
        n.position = pos
        n.strokeColor = SKColor.black
        self.addChild(n)
    

在这种情况下,父母是什么?是创建节点的视图吗?

非常感谢您抽出宝贵时间回答愚蠢的问题。

【问题讨论】:

父级本质上是视图,而您正在做的是将该节点添加到视图中。如果没有这个调用,节点将被创建,但永远不会传递给视图,因此它不会产生。把它想象成给老师做作业,然后 addChild 提交它。如果你不提交它,它就不会被使用。因此,无论您的函数在哪个类中,无论是 ViewController 等,它都是节点被传递给的父级。别担心,这不是一个愚蠢的问题,了解这些功能如何工作的基础是构建更好应用的好方法! 感谢您的宝贵时间,很高兴知道这一点。 @DannyWilson 实际上,它会将其添加到场景中。这是self.addChild()self.view.addSubview() 之间的主要区别。它被添加到 SKScene,而不是 View Controller @Nik 啊,是的,对不起,我已经修改了答案 【参考方案1】:

让我们分解一下:

self 在这种情况下,指的是您当前所在的 SKScene。因此,如果您在 gameScene 中,则该节点将添加到 gameScene .请注意,您可以将节点添加到其他节点,因此如果您有一个名为 gameLayerSKNode,您可以将一个节点添加到 gameLayer,然后将其添加到场景中。 (看起来像这样:gameLayer.addChild(node))如果没有指定节点的位置,它默认选择self

addChild(node) 是实际将指定节点添加到指定位置的函数(见上文)。您可以通过将其声明的名称放在括号中来告诉编译器将哪个节点添加到场景中。

确保您正在设置节点属性(positionsize 等...),因为在您更改它们之前它们会保持默认值。

【讨论】:

【参考方案2】:

父节点本质上是场景,您正在做的是将该节点添加到场景中。如果没有这个调用,节点将被创建,但不会传递给场景,因此它不会产生。

把它想象成给老师做一些家庭作业,然后 addChild 提交它。如果你不提交它,它就不会被使用。因此,无论您的函数在哪个类中,无论是 SKScene 等,这都是节点被传递给的父级。

别担心,这不是一个愚蠢的问题,了解这些功能如何工作的基础是构建更好应用的好方法!

【讨论】:

以上是关于self.addChild 做啥?的主要内容,如果未能解决你的问题,请参考以下文章

在SKScene暂停时动画SKSpriteNode的alpha

TableView+Button

循环遍历 SKNode 的所有子节点?

开始一个节点暂停的场景

动画子视图控制器视图

swift - 在变量名中使用整数for循环