#ios7 #sprite-kit
#ios7 #sprite-kit
Вопрос:
У меня есть игра с бесконечным раннером, и для прокрутки я использую два умеренно (около 1500 пикселей) узла для прокрутки.
Они следуют друг за другом, вот так |firstNode||secondNode|
На каждом из них много объектов, деревьев, различных объектов с физическими телами. Когда один из них покидает экран, я удаляю с него все объекты, снова подключаю его к концу узла, который на самом деле находится на экране, и воссоздаю все объекты снова — в одном из случайных пресетов.
Но есть проблема, когда я воссоздаю объекты для узла, я испытываю небольшое отставание, примерно на 0,1 секунды, и это нарушает мою физику, и игрок часто умирает.
Как мне сделать так, чтобы игра не зависала во время регенерации объектов?
Я попытался с помощью GCD воссоздать объект в другом потоке, но это не удается, поскольку я использую соединения joint и pin, и для этого требуется быть в основном потоке.
Я также думал о том, чтобы где-то предварительно кэшировать эти предустановленные части, но, поскольку я подключаю соединения к реальному физическому миру, это кажется невозможным. Мне также нужно воссоздать монеты, которые мог выбрать игрок.
Как мне это сделать? Как мне устранить задержку при воссоздании большого количества объектов в реальном времени?
Комментарии:
1. Вам не следует создавать ВСЕ объекты для вашего нового узла, а создавать только те объекты, которые вот-вот появятся в представлении. Это увеличит ваш FPS, сэкономит память и время задержки.
2. @sangony Я создаю объекты, которые появятся в поле зрения, они появятся через пару секунд.
3. вы тестировали на реальном устройстве? Симуляторы, как правило, отстают больше.
Ответ №1:
Вы должны реализовать объединение ваших объектов.
Создайте все свои объекты заранее, а затем управляйте их повторным использованием по мере необходимости. Когда вам нужен объект, возьмите его из пула. Когда закончите с ним, верните его в пул
промыть, повторить.
Что касается размеров пула, основывайте это на том, сколько из данного объекта когда-либо понадобится одновременно.
Комментарии:
1. Это помогло, я создал несколько массивов объектов, которые я создаю при запуске, и вместо этого размещаю их на новой вещи. Мне все еще нужно создавать физические тела, но отставание исчезло.
2. Приятно слышать. Да, создание объектов может быть причиной задержки, если вы постоянно создаете и уничтожаете объекты. Кроме того, вы уменьшаете потребность в сборке мусора. Виртуальная свалка также не заполняется мертвыми деревьями.