2015-06-09 130 views
0

我希望訪問範圍之外的變量。 (相關代碼的一小部分已發佈)。在@IBAction中,sphereNode.runAction(moveUp)不被識別。在其範圍外使用變量

我不能簡單地聲明sphereNode全局,因爲它依賴於sphereGeometry聲明。在此先感謝 -

override func viewDidLoad() { 
    super.viewDidLoad() 

    //Added our first shape = sphere 
    let sphereGeometry = SCNSphere(radius: 1.0) 
    let sphereNode = SCNNode(geometry: sphereGeometry) 
    sphereNode.position = SCNVector3Make(0, 0, 0) 
    sphereGeometry.firstMaterial!.diffuse.contents = UIColor.redColor() 
    sphereGeometry.firstMaterial!.specular.contents = UIColor.whiteColor() 
    scene.rootNode.addChildNode(sphereNode) 
} 

@IBAction func animateButton(sender: AnyObject) { 
    let moveUp = SCNAction.moveByX(0.0, y: 1.0, z: 0.0, duration: 1.0) 
    sphereNode.runAction(moveUp) 
} 

}`

初學編程的所以請簡單的解釋表示讚賞。

回答

1

這裏你需要的是一個實例變量。

變量不能在範圍之外使用(並且最終你會發現這是一件非常棒的事情)。但我們可以擴大我們的變量範圍:

class YourViewController: UIViewController { 
    var sphereNode: SNNode? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //Added our first shape = sphere 
     let sphereGeometry = SCNSphere(radius: 1.0) 
     self.sphereNode = SCNNode(geometry: sphereGeometry) 
     self.sphereNode?.position = SCNVector3Make(0, 0, 0) 
     sphereGeometry.firstMaterial!.diffuse.contents = UIColor.redColor() 
     sphereGeometry.firstMaterial!.specular.contents = UIColor.whiteColor() 
     scene.rootNode.addChildNode(sphereNode) 
    } 

    @IBAction func animateButton(sender: AnyObject) { 
     let moveUp = SCNAction.moveByX(0.0, y: 1.0, z: 0.0, duration: 1.0) 
     self.sphereNode?.runAction(moveUp) 
    } 
}