CCSpriteBatchNode Cocos2d жалуется на различные идентификаторы текстуры - PullRequest
4 голосов
/ 30 августа 2011

Я пытаюсь оптимизировать свою игру, используя CCSpriteBatchNode, чтобы визуализировать несколько спрайтов одновременно.Однако по какой-то причине cocos2d выдает мне эту ошибку, когда я представляю CCSpriteBatchNode в качестве родителя для моих спрайтов:

"CCSprite is not using the same texture id"

Я смущен этим, потому что у меня есть один атлас текстуры 1024x1024 со всей моей графикой.Он был создан с TexturePacker и без пакетного узла, все это работает.Я загружаю его с этим:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"atlas1.plist"];

И теперь я пытаюсь использовать CCSpriteBatchNode следующим образом:

CCSprite* sprite = [CCSprite spriteWithSpriteFrameName:@"something.png"];
CCSpriteBatchNode* bar = [CCSpriteBatchNode batchNodeWithFile:@"atlas1.png"];
[bar addChild: sprite]; // assert error here

Я попытался добавить некоторые отладочные выходные данные NSLog в init текстуру cocos2d/ lookup code и, что удивительно, есть некоторые текстуры, созданные с разными размерами (например, 256x256 или даже меньше).Я не понимаю, как это может произойти, когда у меня есть только один 1024x1024 PNG в качестве входа.

Что происходит?Как я могу отладить это?

ОБНОВЛЕНИЕ:

Ответ Бонге помог мне исправить это - заставил меня дважды взглянуть на все.В моем симуляторе iOS были загружены некоторые устаревшие PNG-файлы из более старой версии игры, хотя их больше не было в проекте Xcode.Выполнить «Очистить» или даже «Очистить папку сборки» из XCode не сработало, но с помощью команды «Сбросить содержимое и настройки» из симулятора iOS получилось.Ура!

1 Ответ

8 голосов
/ 30 августа 2011

Если в вашей игре более 1 таблицы спрайтов, убедитесь, что они не имеют общих имен и названий, другой способ - вручную указать идентификатор текстуры.

замените код выше на:

CCSprite* sprite = [CCSprite spriteWithSpriteFrameName:@"something.png"];
CCSpriteBatchNode* bar = [CCSpriteBatchNode batchNodeWithFile:@"atlas1.png"];
[sprite setTexture:[bar texture]];
[bar addChild: sprite]; // assert error here

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

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