SceneKit项目用户互动

时间:2017-08-28 22:52:13

标签: swift macos scenekit

我一直在使用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
    }

}

1 个答案:

答案 0 :(得分:2)

一旦创建了一个SCNAction对象,其参数取决于speed变量,对speed的任何更改都不会更新操作。

这是因为speed是一种值类型(Int),SCNAction实例与您的视图控制器{{1}之间没有任何关联实例变量。这不是SceneKit特有的问题,任何以speed作为参数的API都会以相同的方式运行。