Свойство позиции объекта Xcode 7 SceneKit не обновляется при перемещении?

Итак, я делаю игру, и в этой игре вы будете использовать DPad, чтобы перемещать мяч по сцене. Я использую Xcode 7 Beta 5, хотя та же проблема существовала и в бета-версии 4. Вот код контроллера тестового представления:

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 показывает источник проблемы, с которой я столкнулся, когда камера вообще не двигается:

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 50

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 51

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 52

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 53

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 54

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 55

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 56

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 57

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 58

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 59

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 60

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 61

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 62

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 63

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 64

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 65

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 66

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 67

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 68

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 69

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 70

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 71

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 72

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 73

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 74

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 75

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 76

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 77

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 78

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 79

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 80

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 81

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 82

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 83

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 84

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0) 85

положение игрока SCNVector3 (x: 0,0, y: 1,5, z: 0,0) положение камеры SCNVector3 (x: 0,0, y: 1,5, z: 0,0)

Однако на моем устройстве я вижу, как мяч падает на пол (созданный в файле scn), и действует так, как ожидалось. Единственная проблема в том, что у меня нет доступа к фактическому положению игрока, и поэтому я не могу перемещать камеру.

Я пробовал использовать преобразование вместо положения, и это тоже не сработало. Пожалуйста помоги! Заранее спасибо!


person Nerdy Lime Apps    schedule 10.08.2015    source источник


Ответы (1)


вы должны вывести position узла presentationNode.

person mnuages    schedule 11.08.2015
comment
Я попробую это сейчас. Спасибо за ответ! - person Nerdy Lime Apps; 11.08.2015
comment
Для плеера это сработало, но не для камеры. Я получил журнал, в котором говорится: [SCNKit ERROR] не может установить свойство для экземпляра презентации ‹SCNNode: 0x15f26ad0 | camera = ‹SCNCamera: 0x15f52580› | нет ребенка ›- игнорирование - person Nerdy Lime Apps; 11.08.2015
comment
Ой! забыл отметить вас @mnuages - person Nerdy Lime Apps; 11.08.2015
comment
ну ... это означает, что вы пытаетесь установить свойство для экземпляра презентации, но они доступны только для чтения. camera.position = player.presentatioNode.position - person mnuages; 12.08.2015
comment
Я тоже пробовал этот код, и он не сработал. Камера почему-то просто не двигается. @mnuages - person Nerdy Lime Apps; 12.08.2015
comment
может возникнуть проблема с SCNLookAtConstraint сбросом положения узла, даже если это должно повлиять только на его вращение. Обходной путь - ввести дополнительный родительский узел. - person mnuages; 15.08.2015