我一直在使用SceneKit中的游戏,该游戏涉及用户可以使用箭头键控制的平面。飞机可以飞行,但箭头键对飞机没有影响。当我运行测试以查看箭头键功能是否正常时,我可以看到箭头键有效地改变了飞机的速度,但是飞机没有增加或减少速度。这是代码:
import SceneKit
import QuartzCore
class GameViewController: NSViewController {
var height = 0
var speed = 0 //I should be able to change this value by pressing the up arrow key during the simulation
override func keyDown(with theEvent: NSEvent) {
if(theEvent.keyCode == 123){//left
}
if(theEvent.keyCode == 124){//right
}
if(theEvent.keyCode == 125){//down
}
if(theEvent.keyCode == 126){//up
speed+=1
print(speed)
}
}
override func viewDidLoad(){
super.viewDidLoad()
let scene = SCNScene(named: "art.scnassets/Plane.scn")!
let cameraNode = scene.rootNode.childNode(withName: "camera", recursively: true)!
let plane = scene.rootNode.childNode(withName: "plane", recursively: true)!
plane.runAction(SCNAction.repeatForever(SCNAction.moveBy(x: 0, y: CGFloat(height), z: CGFloat(speed), duration: 1)))
cameraNode.runAction(SCNAction.repeatForever(SCNAction.moveBy(x:0, y:CGFloat(height), z: CGFloat(speed), duration:1)))
let scnView = self.view as! SCNView
}
}
答案 0 :(得分:2)
一旦创建了一个SCNAction
对象,其参数取决于speed
变量,对speed
的任何更改都不会更新操作。
这是因为speed
是一种值类型(Int
),SCNAction
实例与您的视图控制器{{1}之间没有任何关联实例变量。这不是SceneKit特有的问题,任何以speed
作为参数的API都会以相同的方式运行。