我在我的主类中有一个简单的函数调用来从我的Cube类创建一些实例但是我似乎无法将我的实例添加到我的场景中。我尝试在我的Cube类中返回self,但是Swift不会让我在init中执行此操作。
template<typename T>
void sort(T* array, int limit)
{
T* start = array;
T* end = start + limit;
for (T* outer = start; outer < end; ++outer)
{
for (T* inner = start; inner < end; ++inner)
{
if (*outer > *inner)
{
T hold = *inner;
*inner = *outer;
*outer = hold;
}
}
}
}
答案 0 :(得分:2)
init
Cube
中创建的节点不会添加为它的子节点。
我已经简化了下面的代码来说明问题。
func addCubeLoop() {
for /* loop */ {
// 1. create cube
cube = Cube(num: i, importedCube: importedCube1)
// 6. add cube to the scene's root node
theScene.rootNode.addChildNode(cubeArray[i])
}
}
class Cube: SCNNode {
init(importedCube: SCNNode) {
// 2. copy importedCube
let cube: SCNNode = importedCube.copy() as! SCNNode
// configure cube
// ...
// 3. create node
let node = SCNNode()
// 4. add cube (the copy) to node
node.addChildNode(cube)
// configure node
// ...
// 5. End of init
}
}
对于每次循环运行,都会发生这种情况。
创建一个新的多维数据集实例,并传递importedCube1
在多维数据集初始值设定项中,将复制导入的多维数据集参数。节点“cube”现在是参数的副本。
仍然在初始化程序中,创建了一个新节点(称为“节点”)。
仍然在初始化程序中,“cube”(副本)被添加到“node”。此时,cube是“node”的子节点,但Cube实例本身( 一个节点)没有子节点。
初始化完成。
新创建的Cube实例将添加到场景的根节点中。
此时有四个相关节点:
多维数据集实例节点是根节点的子节点。导入的副本是“节点”节点的子节点。但是,“节点”节点没有父节点。
修复是通过在Cube实例初始化程序中将“节点”节点添加到self
来确保所有节点都是层次结构的一部分。