Android — Cocos2dx C ++ имеет дело со многими текстурами

Я в настоящее время использую Cocos2dx C ++ версии 2.0.1. Я понимаю, что это более старая версия cocos2dx, но я изначально начал использовать ее и уже сделал большую часть своей игры с ней, и я действительно не хотел бы переключать версии в это время. Проблема, с которой я сталкиваюсь в настоящее время, состоит в том, что вся моя игра содержит около 3 полных песен, 6 звуковых эффектов и множество текстур. У меня есть около 4 листов спрайтов с использованием подхода .plist / .pvr, каждый из которых имеет около 70 кадров. Теперь я чувствую, что, должно быть, что-то делаю не так, потому что чувствую, что во многих играх гораздо больше данных, чем это, и они могут загружаться просто отлично. Я перепробовал много способов сделать это эффективно. Я опишу каждый подход и проблемы, которые у меня были с каждым.

  1. Я запустил экран загрузки при запуске приложения, но обнаружил, что нет возможности загрузить .plist / .pvr асинхронно, поэтому у меня не было выбора, кроме как загружать каждое изображение .PNG по одному и больше не использовать спрайт листы. Я чувствую, что это нелепый способ, но я не нашел другого решения. Таким образом, используя этот подход, игра загружается (это занимает некоторое время, но это работает), и, поскольку все изображения предварительно загружены, игра работает гладко. Проблема здесь в том, что когда я нажимаю кнопку «Домой» и нажимаю на иконку игры, чтобы возобновить, требуется много времени, чтобы перезагрузить все текстуры, и у меня очень много времени, прежде чем приложение возобновит работу. Чтобы исправить это, я попробовал следующий подход: я узнал о setPreserveEGLContextOnPause () и о том, как сделать так, чтобы текстуры не терялись при нажатии кнопки «Домой». Итак, я наконец-то понял, как это настроить, и это на самом деле решило проблему, но я протестировал это, используя только около четверти моих спрайтов, просто чтобы посмотреть, сколько памяти он использовал, и я увидел, что он уже использует 345 МБ ОЗУ! Это означает, что моя полная игра, вероятно, заставит телефон исчерпать RAM.

  2. После всех неудач с первым подходом я действительно убежден, что делаю что-то ужасно неправильное, потому что я не видел ни одной игры для Android, в которой возникают проблемы с возвращением после нажатия кнопки домой. Я понимаю, что использую много спрайтов, но я могу только так сильно их подавить. Я хотел бы вернуться к использованию подхода .plist / .pvr, но я не могу найти способ загрузки этих типов файлов при отображении экрана загрузки.

  3. Я также попытался просто загрузить каждую вещь для метода инициализации сцены. Это также вызывает одинаковую задержку между переключением сцен.

В целом я действительно застрял. Я чувствую, что я, должно быть, делаю что-то очень неправильное, потому что моя игра — очень простая игра-головоломка, которая ни в коем случае не огромна. Я также хочу найти решение, которое будет работать для iPhone, а также телефонов Android. Любая помощь будет высоко оценен. Благодарю.

1

Решение

1 * использовать формат .mp3 для звука.
2 * загрузить все текстуры в приложение делегата, как это.

#if (CC_TARGET_PLATFORM == CC_PLATFORM_MAC)

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(  gsd->getFullPath("name.plist")->getCString()  )

#endif
#if  (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile( "name.plist" );
#endif
#if  (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile( "name.plist" );

#endif
0

Другие решения