实例化类不起作用 - 快速

时间:2016-02-09 09:57:41

标签: ios scenekit

我在我的主类中有一个简单的函数调用来从我的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;
            }
        }
    }
}

1 个答案:

答案 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
    }
}

对于每次循环运行,都会发生这种情况。

  1. 创建一个新的多维数据集实例,并传递importedCube1

  2. 在多维数据集初始值设定项中,将复制导入的多维数据集参数。节点“cube”现在是参数的副本。

  3. 仍然在初始化程序中,创建了一个新节点(称为“节点”)。

  4. 仍然在初始化程序中,“cube”(副本)被添加到“node”。此时,cube是“node”的子节点,但Cube实例本身( 一个节点)没有子节点。

  5. 初始化完成。

  6. 新创建的Cube实例将添加到场景的根节点中。

  7. 此时有四个相关节点:

    • 根节点,
    • 多维数据集实例节点
    • 名为“node”的节点
    • 导入的副本

    多维数据集实例节点是根节点的子节点。导入的副本是“节点”节点的子节点。但是,“节点”节点没有父节点。

    修复是通过在Cube实例初始化程序中将“节点”节点添加到self来确保所有节点都是层次结构的一部分。