Cocos2d Android текстур проблема на Motorola Xoom - PullRequest
1 голос
/ 26 декабря 2011

Я занимаюсь разработкой игры для Android с фреймворком Cocos2d с последней сборкой от github (Weikuan Zhou).

В моей игре я использовал много изображений (общий размер изображений около 11 МБ).

Проблема: Я получаю черный ящик вместо изображений, когда играю в игру более 3 раз.

Какие шаги воспроизведут проблему? 1. Когда я играю в свою игру более 3 раз с помощью функции «Играть снова» в моей игре.

Каков ожидаемый результат? Что ты видишь вместо этого? - изображения должны отображаться правильно вместо "BLACK BOX".

и в моем logcat я вижу, что объем памяти Heap составляет около 13 МБ.

  • Я уже выпускаю текстуру с помощью метода ниже
.

CCTextureCache.sharedTextureCache () removeAllTextures ();

Я также пытался удалить спрайт вручную, напр. removeChild() метод.

Но пока не удается найти какое-либо решение.

Если у кого-то есть решение для этого, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 13 августа 2013

Эта проблема возникает при загрузке ресурсов во время выполнения. Поэтому лучше загружать ресурсы до начала сцены. Вы можете сделать это следующим образом.

  1. Использование таблиц спрайтов для ресурсов в вашей игре.
  2. Реализуйте свой пользовательский интерфейс в конструкторе вашего класса.
  3. Реализуйте свою функциональность в переопределенном методе onEnter () в вашем слое.
  4. Вы должны выгрузить свои листы спрайтов после окончания сцены.

Это процедура, которой я следую. Спасибо.

0 голосов
/ 26 апреля 2012

Из того, что вы описываете, вы столкнулись с той же проблемой, что и я, - то, что cocos2d для android действительно глючит, когда имеет дело с множеством отдельных спрайтов, загружаемых по отдельности.

Лучший способ решить эту проблему - получить (если у вас нет Mac) бесплатную флеш-версию zwoptex отсюда http://zwopple.com/zwoptex/static/downloads/zwoptex-flashversion.zip

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

Это в основном связано с тем, что cocos выполняет один рендеринг для ВСЕХ спрайтов в листе спрайтов, а не один рендеринг для каждого спрайта для нормальных спрайтов, что значительно сокращает время обработки и значительно уменьшает использование памяти.

затем вы можете загрузить таблицу spritesheet с кодом, например (не могу гарантировать, что этот код будет выполняться, поскольку я получаю фрагменты из структурированного проекта, но это приведет вас к правильному решению)

CCSpriteFrameCache.sharedSpriteFrameCache().addSpriteFrames("menus.plist");  // loads the spritesheet into the frame cache
CCSpriteSheet menuSpriteSheet = CCSpriteSheet.spriteSheet("menus.png", 20); // loads the spritesheet from the cache ready for use

.... // menu is a CCLayer
    CCSprite sprite = CCSprite.sprite(CCSpriteFrameCache.sharedSpriteFrameCache().spriteFrameByName("name of sprite from inside spritesheet.png"));

menuSpriteSheet.addChild(sprite, 1, 1); /  you add the sprite to its spritesheet
menu.addChild(menuSpriteSheet, 1);  // then add the spritesheet to the layer
...