如何在不重置 SCNNode 位置的情况下重置 SCNNode 的 SCNPhysicsBody?

Posted

技术标签:

【中文标题】如何在不重置 SCNNode 位置的情况下重置 SCNNode 的 SCNPhysicsBody?【英文标题】:How can I reset an SCNNode's SCNPhysicsBody without resetting the SCNNode's position? 【发布时间】:2017-10-27 06:14:47 【问题描述】:

我有一个适用于 ios 的 sceneKit 应用程序。我有一个连接到 SCNNode 的 SCNPhysicsBody。我将 .physicsBody 设置为 nil,对 SCNNode 进行一些更改,然后将 .physicsBody 设置为新的 SCNPhysicsBody 或原始 SCNPhysicsBody 的副本。在任何一种情况下,SCNNode 都会将其位置重置为其初始位置。

如何重置 .physicsBody 并将 SCNNode 保持在同一位置,以便它继续其轨迹?

【问题讨论】:

【参考方案1】:

当你的物理影响节点位置时,它的原始位置(分配给节点position 属性)保持不变,presentation node 位置会改变。所有的变换(旋转/缩放/平移)都是这样工作的。

所以你可以做一些类似这个伪代码的事情:

// 1. remember position of presentation node
var position = node.presentation.position;
// 2. do some changes on node, physics body, whatever
// 3. restore position (without losing original node position)
your_node.presentation.position = position
// ... or apply presentation position to original position
your_node.position = position

【讨论】:

以上是关于如何在不重置 SCNNode 位置的情况下重置 SCNNode 的 SCNPhysicsBody?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重置Java的情况下绘制多个对象

如何在不改变世界坐标中的相对位置、大小和比例的情况下将 SCNNode 作为子节点添加到父节点

如何在不从表单中删除数据的情况下重置 BootstrapValidator? [复制]

通知意图 - 如何在不重置的情况下恢复通知中的活动?

如何使用 git reset 在不丢失本地更改的情况下重置未推送的提交

如何在不重置其当前状态的情况下从一个视图控制器到自身进行转场?