Cocos2d игровой слой отрывистый при запуске, гладкий после replaceScene с той же сценой
Моя сцена запускается из сцены выбора уровня с использованием replaceScene, и передается номер уровня. Игровой слой загружает данные из plist, а затем создает объекты в мировом пространстве (подкласс CCSprite с телами box2d). Персонаж героя остается в центре экрана во время воспроизведения уровня - я настраиваю положение слоя, чтобы сделать это, а также масштаб слоя, чтобы увеличивать и уменьшать масштаб в зависимости от скорости движения.
Например:
CGPoint layerPosition = ccp(((screenSize.width / 2) - ourHero.position.x) * sceneScale, ((screenSize.height / 2) - ourHero.position.y) * sceneScale);
[self setPosition:layerPosition];
[self setScale:sceneScale];
Проблема в том, что в первый раз движение уровня часто может быть рывком, когда скорость увеличивается и слой уменьшается (не только на несколько секунд в начале). Тем не менее, если пользователь перезапускает уровень (кнопка выполняет replaceScene), перемещение уровня замены происходит идеально плавно, даже на скорости.
Я использую batchnode и храню изображения спрайтов в кэше кадров. Я попытался настроить кэш кадров и предварительно загрузить звуки в сцене выбора уровня, но это не имеет никакого значения. Я пытался очистить кэш между уровнями, чтобы посмотреть, смогу ли я сделать так, чтобы перезапущенный уровень демонстрировал то же поведение, но ничего не сделал.
Кто-нибудь может подсказать, что может вызвать это и как я смогу устранить это.
Спасибо!
1 ответ
Возможное решение:
Загрузите всю текстуру и спрайт лист в init/onEnter. Если невозможно загрузить все сразу, используйте загрузку с резьбой. Для аудио / музыки вы можете использовать вызовы preLoad в звуковом движке.
Вот моя нить. Я тоже столкнулся с чем-то такой же проблемой. Окончательно решается с помощью отдельного потока для загрузки.