Игра Cocos2d вылетает при загрузке нескольких .plist одновременно - PullRequest
1 голос
/ 08 июля 2011

Моя игра для iphone, над которой я сейчас работаю, была разработана с использованием cocos2d. Игра вылетает с ошибкой:

Программа получила 0, средства форматирования данных, отладка не может продолжаться ......

Проведя некоторое исследование, я обнаружил, что ему не хватает памяти. Я получил:

Получено предупреждение о памяти. Уровень = 1 и т. Д.

Источником проблемы является загрузка файлов plists. Он использует 4,0 МБ только для загрузки около 23 файлов .plist для запуска различных анимаций. enter image description here

Я хотел бы знать, как загрузить несколько файлов plist, которые запускают различные анимации. Изображение представляет собой скриншот кода, который загружает файлы plist вместе с использованием памяти. Я использовал инструменты, чтобы получить этот результат.

При дальнейшей отладке вот что я получил ассемблерный код

pop {r4, r5, r7, pc}
adds    r0, #100  ; 0x64
lsls    r3, r1, #0
--Error--
lsls    r2, r1, #0
add r7, sp, #720
lsls    r4, r1, #0
cbz r4, <0x7a>
lsls    r4, r1, #0

Ответы [ 2 ]

0 голосов
/ 08 июля 2011

Для каждого вызова addSpriteFramesWithFile Cocos2d загружает соответствующий файл изображения (.png), и у вас появляется довольно много листов спрайтов.Я собираюсь предположить, что каждый из этих листов не велик, потому что очевидно загрузка этого большого количества текстур создаст предупреждения памяти.

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

Также обратите внимание, что ваше изменение на applicationDidReceiveMemoryWarning не останавливает Cocos2d от удаления текстур, вам также необходимо закомментировать вызов removeAllTexturesчтобы проверить это.

0 голосов
/ 08 июля 2011
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
//[[CCDirector sharedDirector] purgeCachedData];
}

Попробуйте комментировать purgeCachedData и просто вызывайте его, когда выходите из игры. Сцена

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