我希望访问其范围之外的变量。 (发布了相关代码的片段)。在@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)
}
}`
初学者程序员,所以请简单的解释表示感谢 - 提前感谢。
答案 0 :(得分: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)
}
}