如何解决施加力后如何获得当前的SCNnode位置
我使用以下方法对场景中的 SCNnode 施加一个恒定的力,
func applyForceToDrone(powerApply: Double,isHovering: Bool,gravity : SCNVector3) {
let nodo = arrayDrone[0] // load the first drone in the scene
guard let lhBlade = nodo.childNode(withName: "Rotor_L_2",recursively: true) else {fatalError()}
guard let rhBlade = nodo.childNode(withName: "Rotor_R_2",recursively: true) else {fatalError()}
if isHovering == true {
print("x gravity = \(gravity.x),\(gravity.y) \(gravity.z)")
let force = SCNVector3(gravity.x,abs(gravity.y),gravity.z)
nodo.physicsBody?.applyForce(force,asImpulse: false)
} else {
print("apply power \(powerApply)")
let positionBladeLH = lhBlade.position
let positionBladeRH = rhBlade.position
let force = SCNVector3(0,powerApply,0)
nodo.physicsBody?.applyForce(force,at: positionBladeLH,asImpulse: false)
nodo.physicsBody?.applyForce(force,at: positionBladeRH,asImpulse: false)
let alt = nodo.position.y // position is wrong ... is always the starting position
print(alt)
}
}
我在渲染方法中使用了这个函数来驾驶我的无人机。
func renderer(_ renderer: SCNSceneRenderer,updateAtTime time: TimeInterval) {}
我想在每次施加力时读取节点的当前位置。
如何在渲染施加力时获取更新位置。
我试过:
let alt = nodo.position.y
但它总是给我节点的起始位置,而不是施加力后的位置。
谢谢
解决方法
像这样使用节点的表示对象:
代替
nodo.position.y
使用
nodo.presentation.position.y // local space
或
nodo.presentation.worldPosition.y // world space
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。