Xcode 7 SceneKit对象';s位置属性在移动时不更新?
所以我在做一个游戏,在这个游戏中,你将使用DPad在场景中移动你的球。我使用的是Xcode 7 Beta 5,尽管Beta 4中也存在同样的问题。以下是测试视图控制器的代码:Xcode 7 SceneKit对象';s位置属性在移动时不更新?,xcode,camera,scenekit,scnnode,xcode7-beta5,Xcode,Camera,Scenekit,Scnnode,Xcode7 Beta5,所以我在做一个游戏,在这个游戏中,你将使用DPad在场景中移动你的球。我使用的是Xcode 7 Beta 5,尽管Beta 4中也存在同样的问题。以下是测试视图控制器的代码: class TestController: UIViewController,DPadDelegate { @IBOutlet var scnView:SCNView! @IBOutlet var dpad:DPad! var timer:NSTimer? var update:NSTimer? var colors =
class TestController: UIViewController,DPadDelegate {
@IBOutlet var scnView:SCNView!
@IBOutlet var dpad:DPad!
var timer:NSTimer?
var update:NSTimer?
var colors = [UIColor.blueColor(),UIColor.redColor(),UIColor.whiteColor(),UIColor.yellowColor(),UIColor.cyanColor(),UIColor.orangeColor(),UIColor.magentaColor(),UIColor.purpleColor()]
var player:SCNNode!
var camera:SCNNode = SCNNode()
var i = 0
override func viewDidLoad() {
super.viewDidLoad()
NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: "ColorCubeUpdate", userInfo: nil, repeats: true)
NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "updateCamera", userInfo: nil, repeats: true)
dpad.delegate = self
player = SCNNode(geometry: SCNSphere(radius: 0.25))
player.geometry?.firstMaterial?.diffuse.contents = UIImage(named: "PlainEyes1")
player.geometry?.firstMaterial?.multiply.contents = UIColor(red: 1.0, green: 0.5, blue: 0.5, alpha: 1.0)
player.position = SCNVector3Make(0, 1.5, 0)
player.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Dynamic, shape: SCNPhysicsShape(geometry: player.geometry!, options: nil))
scnView.scene?.rootNode.addChildNode(player)
camera.camera = SCNCamera()
let constraint = SCNLookAtConstraint(target: player)
camera.constraints? = [constraint]
}
func updateCamera() {
i += 1
print(i)
print("player's position \(player.position) camera position \(camera.position)")
camera.position = player.position//SCNVector3Make(player.position.x+4, player.position.y+2, player.position.z)
}
func dPadDown() {
player.physicsBody?.applyForce(SCNVector3(x: 1, y: 0, z: 0), atPosition: SCNVector3(x: 0, y: 0, z: 0), impulse: false)
}
func dPadUp() {
player.physicsBody?.applyForce(SCNVector3(x: -1, y: 0, z: 0), atPosition: SCNVector3(x: 0, y: 0, z: 0), impulse: false)
}
func dPadLeft() {
player.physicsBody?.applyForce(SCNVector3(x: 0, y: 0, z: 1), atPosition: SCNVector3(x: 0, y: 0, z: 0), impulse: false)
}
func dPadRight() {
player.physicsBody?.applyForce(SCNVector3(x: 0, y: 0, z: -1), atPosition: SCNVector3(x: 0, y: 0, z: 0), impulse: false)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
颜色数组用于其他地方,i变量仅用于调试,正如您在UpdateCamera函数中看到的那样。这一切看起来都不错,但我在Xcode中的输出显示了一个问题的根源,即相机根本不移动:
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
五十
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
五十一
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
五十二
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
五十三
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
54
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
五十五
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
56
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
57
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
58
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
59
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
六十
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
61
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
62
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
63
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
六十四
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
六十五
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
66
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
67
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
68
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
六十九
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
七十
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
七十一
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
七十二
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
七十三
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
七十四
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
七十五
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
76
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
77
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
78
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
七十九
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
八十
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
81
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
八十二
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
八十三
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
八十四
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
八十五
玩家位置转换3(x:0.0,y:1.5,z:0.0)相机位置转换3(x:0.0,y:1.5,z:0.0)
然而,在我的设备上,我看到球落在地板上(在scn文件中制作),并按预期动作。唯一的问题是,我无法进入球员的实际位置,因此无法移动我的相机
我试过用变换代替位置,但也没用。请帮忙!
提前谢谢 您应该打印节点的
presentationNode的位置
您应该打印节点的presentationNode的位置
我现在就试试。谢谢你的回复!它对玩家有效,但对相机无效。我收到一个日志,上面说:[SCNKit ERROR]无法在演示实例上设置属性-ignoringOh!忘记将您标记为@mnuageswell…这意味着您正试图在演示文稿实例上设置属性,但它们是只读的camera.position=player.presentatioNode.position
我也试过那个代码,但没用。由于某种原因,照相机无法移动@努格西现在就试试。谢谢你的回复!它对玩家有效,但对相机无效。我收到一个日志,上面说:[SCNKit ERROR]无法在演示实例上设置属性-ignoringOh!忘了给你贴上@mnuageswell…这意味着