gpt4 book ai didi

ios - 实例化类不起作用 - swift

转载 作者:行者123 更新时间:2023-11-29 10:21:01 24 4
gpt4 key购买 nike

我在我的主类中有一个简单的函数调用来从我的 Cube 类中创建一些实例,但我似乎无法将我的实例添加到我的场景中。我尝试在我的 Cube 类中返回 self ,但 Swift 不允许我在 init 中这样做。

func addCubeLoop() {
for var i = 0; i <= 0; ++i {
cube = Cube(num: i, importedCube: importedCube1)
cubeArray.append(cube)
theScene.rootNode.addChildNode(cubeArray[i])
}
}


class Cube: SCNNode {

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

init(num: Int, importedCube: SCNNode) {
let _scale: Float = 60
let cube: SCNNode = importedCube.copy() as! SCNNode

super.init()

cube.scale = SCNVector3Make(_scale, _scale, _scale)
let node = SCNNode()
node.addChildNode(cube)
node.position = SCNVector3Make(5, 20, 3)
let collisionBox = SCNBox(width: 5.0, height: 5.0, length: 5.0, chamferRadius: 0)
node.physicsBody?.physicsShape = SCNPhysicsShape(geometry: collisionBox, options: nil)
node.physicsBody = SCNPhysicsBody.dynamicBody()
node.physicsBody?.mass = 0.1
node.physicsBody?.restitution = 0.8
node.physicsBody?.damping = 0.5
node.name = "dice" + String(num)
node.physicsBody?.allowsResting = true
}
}

最佳答案

Cubeinit 中创建的节点不会添加为它的子节点。

我已经简化了下面的代码来说明问题。

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. 新建一个Cube实例,传入importedCube1

  2. 在 Cube 初始化器中,导入的 cube 参数被复制。节点“立方体”现在是参数的副本。

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

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

  5. 初始化完成。

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

此时有四个相关节点:

  • 根节点,
  • 立方体实例节点
  • 名为“节点”的节点
  • 导入的副本

立方体实例节点是根节点的子节点。导入的副本是“节点”节点的子节点。但是,“节点”节点没有父节点。

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

关于ios - 实例化类不起作用 - swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35288909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com