Каков эффективный способ переключения CCSpriteBatchNode?
Мне нужно переключить атлас текстуры из узла CCSpriteBatch. Подход, который я выбрал, заключается в том, что после того, как играбельный персонаж достигает определенной оси X (700), игра меняет ее.
и он работает нормально визуально, но проблема в том, что он зависает на 2-3 секунды при смене экрана, и я получаю предупреждение о памяти в консоли.
Я не думаю, что я единственный, кто когда-либо делал это, что заставляет меня задуматься, как правильно (самый легкий) способ переключения CCSpriteBatchNode.
Смотрите ниже текущий код переключения:
if(mainCharacter.x > 700)
{
//NSLog(@"switch!");
float oldHeroX, oldHeroY;
oldHeroX = mainCharacter.x;
oldHeroY = mainCharacter.y;
[_myBatchNode removeChild:mainCharacter];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:texturePList1];
[self removeChild:_myBatchNode];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:texturePList2];
_myBatchNode = [CCSpriteBatchNode batchNodeWithFile:texturePNG2];
[_myBatchNode.texture setAliasTexParameters];
[self addChild: _myBatchNode z:-6];
//this is just a method that starts the playable character sprite and add to batch node and layer
[self startCharacter:oldHeroX :oldHeroY];
}
Спасибо
1 ответ
Я стараюсь избегать загрузки "на лету", по большому счету: т.е. я предварительно загружаю все свои текстуры перед началом сцены (или вырезанной сцены), обычно во время перехода. Когда завис, и я должен загрузить на лету (потому что объем памяти предварительно загруженных текстур слишком высок), я буду использовать текстуры pvr (без сжатия), жертвуя размером пакета, чтобы получить скорость загрузки и использование памяти во время загрузки. YMMV, в зависимости от размера отдельных текстур, вам нужно переключаться "на лету".
Кроме того, если вам нужен только спрайт или анимация, не используйте пакетный узел. Ничего не получилось, но очистка и свертывание обходятся дорого.