SceneKit
Есть ли способ получить уведомление, когда dynamicBody
находится в состоянии покоя? Я хочу удалить dynamicBody
, когда он закончен, чтобы упасть на землю и полностью перестал двигаться. Я предполагаю, что у меня будет достаточно большого количества таких элементов, поэтому я хотел бы использовать что-то событие, а не перебирать все bodies
и проверять их скорости ?SceneKit SCNPhysicsBody получает уведомление о поколении
0
A
ответ
1
Вы можете использовать наблюдение за ключевыми значениями на свойстве isResting
. См. Is key-value observation (KVO) available in Swift?.
Или вы можете использовать SCNPhysicsContact
и SCNPhysicsContactDelegate
для обнаружения столкновений с полом и использовать это для запуска проверки скорости.
Имеет ли KVO значительную плату за проезд? – ColdSteel
Это имеет некоторую стоимость. Вы можете измерить его, чтобы точно узнать, сколько. Еще одна проблема заключается в том, что KVO не очень Swift-y (вы не указали язык, который используете). Я не помню, как выглядит последовательность вызовов SCNPhysicsContact, обратный вызов renderer (_: didSimulatePhysicsAtTime :) из SCNSceneRenderer и обновление скоростей объектов; вам может потребоваться присвоить узел для удаления в одном обратном вызове и удалить его в другом. Использование делегата-участника чувствует себя как стиль Swift для меня, хотя я не могу точно сформулировать, почему. –
Я использую - Objective-C, я спросил о производительности, потому что я напряжен на процессоре - анимации занимают почти 13 мс + флеш и прочее ... Я оставил меньше 1,2 мс - честно Патетический ... – ColdSteel