SceneKit SCNPhysicsBody получает уведомление об отдыхе

SceneKit Есть ли способ получать уведомления, когда dynamicBody находится в состоянии покоя? Я хочу удалить dynamicBody, когда он закончит падать на землю и полностью перестанет двигаться - я предполагаю, что у меня будет довольно много их, поэтому я хотел бы использовать что-то основанное на событиях, а не перебирать все bodies и проверять их скорости?


person ColdSteel    schedule 24.12.2016    source источник


Ответы (1)


Вы можете использовать наблюдение за ключом и значением для свойства isResting. См. раздел доступно ли наблюдение за ключом и значением (KVO) в Swift?.

Или вы можете использовать SCNPhysicsContact и SCNPhysicsContactDelegate для обнаружения столкновений с полом и использовать их для запуска проверки скорости.

person Hal Mueller    schedule 24.12.2016
comment
Это имеет некоторую стоимость. Вы можете измерить его, чтобы узнать, сколько именно. Еще одна проблема заключается в том, что KVO не очень Swift-y (вы не упомянули язык, который используете). Я не помню навскидку, какова последовательность обратного вызова SCNPhysicsContact, обратного вызова renderer(_:didSimulatePhysicsAtTime:) от SCNSceneRenderer и обновления скоростей объектов; вам, возможно, придется поставить узел в очередь на удаление в одном обратном вызове и удалить его в другом. Использование контактного делегата кажется мне лучшим стилем Swift, хотя я не могу точно сформулировать, почему. - person Hal Mueller; 26.12.2016
comment
Я использую - Objective-C, я спросил о производительности, потому что я нагружаю процессор - анимация занимает почти 13 мс + флеш и прочее ... У меня осталось менее 1,2 мс - честно говоря, жалко ... - person ColdSteel; 26.12.2016
comment
Реализовать каждый подход, а затем измерить/сравнить не так уж и сложно. Преждевременная оптимизация - корень всех зол, по словам одного известного человека :-) - person Hal Mueller; 26.12.2016
comment
Я застрял на полпути туда, сначала мне придется справиться с этим, а затем попробовать оба варианта, как вы предлагаете. Думаю, мне лучше опубликовать вопрос об оптимизации анимации. - person ColdSteel; 26.12.2016