【问题标题】:SceneKit SCNPhysicsBody get notified of restingSceneKit SCNPhysicsBody 得到休息通知
【发布时间】:2016-12-24 10:25:36
【问题描述】:

SceneKitdynamicBody 处于休息状态时,有没有办法得到通知? 我想在 dynamicBody 完成落地并完全停止移动时删除它 - 我想我会有很多这样的东西,所以我想使用基于事件的东西而不是循环遍历所有 bodies 和检查他们的速度?

【问题讨论】:

    标签: scenekit physics-engine


    【解决方案1】:

    您可以在 isResting 属性上使用键值观察。见Is key-value observation (KVO) available in Swift?

    或者您可以使用SCNPhysicsContactSCNPhysicsContactDelegate 来检测与地板的碰撞,并使用它来触发速度检查。

    【讨论】:

    • 它有一些成本。您可以测量它以找出确切的数量。更多的问题是 KVO 不是很 Swift-y(你没有提到你正在使用的语言)。我不记得 SCNPhysicsContact 回调的顺序是什么,来自 SCNSceneRenderer 的 renderer(_:didSimulatePhysicsAtTime:) 回调,以及对象速度的更新;您可能必须在一个回调中将要删除的节点排入队列,然后在另一个回调中将其删除。对我来说,使用联系代理感觉更像是更好的 Swift 风格,尽管我无法准确说明原因。
    • 我正在使用 - Objective-C,我询问了性能,因为我在 CPU 上很紧张 - 动画几乎需要 13 毫秒 + 刷新和其他东西......我留下的时间不到 1.2 毫秒 - 老实说可悲.. .
    • 实现每种方法然后测量/比较的工作量并不大。根据一些名人的说法,过早的优化是万恶之源:-)
    • 我在中间卡住了,必须先处理它,然后按照您的建议尝试两者。我想我最好发布一个关于动画优化的问题。
    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多