Im получение ошибки на 4-й строке кода Я прикрепил изображение к этому вопросу, которое должно объяснить все, что, вероятно, является быстрым решением, но я никогда не видел его.Ошибка «Невозможно преобразовать значение» на enumerateChildNodesUsingBlock call
Код:
let GuyScene = SCNScene(named: "art.scnassets/TestMan1.scn")
let Guy: SCNNode = GuyScene!.rootNode.childNodeWithName("Man", recursively: true)!
let collisionCapsuleRadius2 = CGFloat(0.1)
let collisionCapsuleHeight2 = CGFloat(0.1)
Guy.position = SCNVector3(x: -30.0, y: 30.0, z: 0.0)
Guy.scale = SCNVector3Make(5, 5, 5)
Guy.rotation = SCNVector4Make(0, 1, 0, 1)
//----Giveing it a physics---------
Guy.physicsBody = SCNPhysicsBody(type: .Dynamic, shape:SCNPhysicsShape(geometry: SCNCapsule(capRadius: collisionCapsuleRadius2, height: collisionCapsuleHeight2), options:nil))
Guy.physicsBody?.affectedByGravity = true
Guy.physicsBody?.friction = 0 //
Guy.physicsBody?.restitution = 1 //bounceness of the object
Guy.physicsBody?.angularDamping = 1 // rotationess
Guy.physicsBody?.mass = 1
Guy.physicsBody?.rollingFriction = 0
GuyScene!.rootNode.addChildNode(Guy)
scnView.scene!.rootNode.addChildNode(Guy)
func loadAnimationFromSceneNamed(path: String) -> CAAnimation {
var scene: SCNScene = SCNScene(named: path)!
var animation: CAAnimation? = nil
scene.rootNode.enumerateChildNodesUsingBlock({(child: SCNNode, stop: Bool) -> Void in
if child.animationKeys.count > 0 {
animation = child(animationForKey: child.animationKeys[0])
stop = true
}
})
return animation!
}
var scenePath: String = "art.scnassets/Animation1.scn"
var thisAnimation: CAAnimation = loadAnimationFromSceneNamed(scenePath)
var timer = NSTimer.scheduledTimerWithTimeInterval(1.5, target: self, selector: "Start", userInfo: nil, repeats: true)
func Start() {
Guy.addAnimation(thisAnimation, forKey: "thisAnimationKey")
}
Ниже картина ошибок, которые я получаю, когда я делаю предлагаемые ответы на этот вопрос
Extra АргументЪ ??? Благодаря почти там лол
См [это Q & A] (http://stackoverflow.com/questions/24213436/how-to-use-enumeratechildnodeswithname- с-swift-in-spritekit) - просто отбросьте явные аннотации типа из закрытия, а затем используйте 'stop.memory = true', чтобы остановить перечисление. – Hamish
Ok Но знаю, что я получаю ошибку на self.enumrateChildNodesWithName. для замены я использовал «Guy», «GuyScene! .rootNode», «scnView.scene!» Я обновил вопрос –
Не используйте 'enumerateChildNodesWithName', используйте' enumerateChildNodesUsingBlock' - я просто привязывался к этому Q & A как пример того, как вводить замыкание (это код SpriteKit, а не SceneKit). – Hamish