Как загрузить фон сцены загрузки в cocos2d без гашения?

У меня есть игра cocos2d, в которой есть сцена загрузки, в которой мы загружаем кучу ассетов. Игра начинается с заставки, а затем запускает сцену загрузки. Сцена загрузки начинается с загрузки фона, поэтому пользователь видит фон сцены загрузки во время загрузки ресурсов.

Я загружаю фон сцены загрузки, вызывая CCSprite::spriteWithFile: и передавая путь к файлу: loadingbackground.pvr.ccz

На разных устройствах работает по-разному:

  1. На симуляторе iphone (3gs) я вижу сцену загрузки, как и ожидалось.
  2. На симуляторе iphone retina я не вижу сцены загрузки (пока не так много ресурсов, поэтому это может происходить быстро), и она переходит прямо к сцене главного меню.
  3. На устройстве ipad 3 появляется заставка, затем полсекунды черного экрана, а затем появляется сцена главного меню.

Я хочу посмотреть, что я могу сделать, чтобы избежать появления черного экрана на iPad 3. Я подозреваю, что это из-за времени, необходимого для загрузки фона загрузки.

Я пробовал следующие оптимизации (в основном на основе запись в блоге об оптимизации памяти):

  1. Фон загрузки (изначально 2,3 МБ png-файл RGB8) перемещен в таблицу спрайтов pvr.ccz, что уменьшило его размер до 1,8 МБ.
  2. Убрано изображение из текстуры вскоре после использования.

Я все еще вижу черный экран на iPad 3. Есть предложения?

Обновление: нашел проблему - у меня был код, в котором я переопределял OnEnter и вызывал в нем [[CCDirector sharedDirector]replaceScene], а также вызывал то же самое из фонового потока. Удалена перегрузка OnEnter, и все заработало без мерцания.

Спасибо


person Anand    schedule 22.01.2013    source источник


Ответы (2)


Игнорируйте все, что происходит в Симуляторе. Это не имеет значения, сосредоточьтесь на устройстве.

Когда сцена загрузки инициализируется и вы добавляете фон сцены загрузки, убедитесь, что вы запланировали обновление и загрузили свои активы в методе обновления. В противном случае, если вы загрузите ресурсы в init, фон не будет отрисован, потому что вы загружаете все ресурсы до того, как cocos2d перерисует экран.

Если это все еще не удается, просто отправьте сообщение о посещении фоновому спрайту, а затем [[CCDirector sharedDirector] drawScene]. Это вызывает перерисовку сцены.

person LearnCocos2D    schedule 22.01.2013
comment
У меня действительно загружались активы в фоновом режиме, поэтому я помечаю их как ответ. Также исправлена ​​​​еще одна ошибка, которую я описал в обновлении вопроса. Спасибо! - person Anand; 29.01.2013

Это cocos2d-iphone или cocos2d-x? убедитесь, что теги правильные :)

Я думаю, вы имеете в виду мерцание при запуске, есть несколько способов избежать этого. Прежде всего, вам нужно убедиться, что вы правильно обрабатываете rootViewController для iOS 6 и iOS 5 и ниже, для каждого из них есть небольшие изменения.

Вы можете найти небольшую справку здесь: http://www.cocos2d-iphone.org/forum/topic/34471

Во-вторых, вам нужно знать, что поведение симулятора нестабильно, вы всегда должны полагаться на реальные устройства для тестирования, но очень вероятно, что у вас все еще будут проблемы с мерцанием.

Извините, я не предоставил пример кода, но вы не предоставили достаточно информации, чтобы понять, в чем здесь настоящая проблема.

person Mostafa Berg    schedule 25.01.2013