У меня проблема с приложением SceneKit (используя Metal), когда новые узлы появляются на экране, даже если приложение работает плавно со скоростью 60 кадров в секунду до и после.Приложение SceneKit заикается, когда появляются новые узлы
Представьте себе игру, в которой все разрушено, а иногда появляются бонусы в месте, где что-то было разрушено. Я уверен, что заикание связано с появлением бонусов, потому что это не происходит, когда вещи просто уничтожаются (и таким образом удаляются со сцены).
Что я сделал до сих пор, чтобы попытаться исправить заикание: Я предварительно загружаю узлы с помощью метода предварительной загрузки вида SceneKit и добавляю их в сцену только в своем обработчике завершения. Я добавляю их над камерой задолго до того, как их нужно будет показать, и когда придет время, я просто перевешу их в нужное положение. Я реализовал механизм очередей, чтобы обеспечить только одно изменение (удаление узла уничтоженного элемента, перемещение его на место) выполняется для каждого кадра.
Но заикание по-прежнему происходит иногда (не всегда), когда появляются бонусы. Мне интересно, делает ли SceneKit что-то только тогда, когда узлы появляются впервые (даже если они были предварительно загружены). Что бы ни случилось, кажется, достаточно, чтобы вызвать заикание, но слишком короткое для измерителей производительности XCode, чтобы показать это. В каждом фрейме много свободного времени, процессор и графический процессор никогда не приближаются к максимальному.
Я не думаю, что проблема связана с сложной геометрией или огромными текстурами, потому что это все еще происходит, когда я использую простые кубы с однородными цветами вместо этого.
Любая идея, что здесь происходит или как я могу отслеживать это?