Добавление обычного CCSprite к сбоям CCSpriteBatchNode

Я получаю это исключение в журналах

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSprite is not using the same texture id'

Что я пытаюсь сделать, это добавить нормальный файл "myfile.png" в SpriteBatchNode

** объявление узла партии

CCSpriteBatchNode *_backgroundLayer = [CCSpriteBatchNode batchNodeWithFile:@"sprites.png"];

** использование

Эта линия отлично работает

CCSprite *sprite1 = [CCSprite spriteWithSpriteFrameName:@"PngFileKeptInSpriteSheet.png"];
[_backgroundLayer addChild:sprite1];

Но когда я использую прямой *.png файл для добавления в пакетный узел, он вылетает

    CCSprite *sprite2 = [CCSprite spriteWithFile:@"myfile.png"];

падает на линии

        [_backgroundLayer addChild:sprite2];

При дальнейшей отладке я обнаружил, что:

Ошибка подтверждения в файле CCSpriteBatchNode.m

внутри метод -(void) addChild:(CCSprite*)child z:(NSInteger)z tag:(NSInteger) aTag

на линии NSAssert( child.texture.name == textureAtlas_.texture.name, @"CCSprite is not using the same texture id");

PS: под "нормальным" я подразумеваю не взятый из файла *.plist

1 ответ

Решение

Прежде всего, я бы обновил cocos2D. Однако это не ваша проблема и, вероятно, в любом случае не "исправлено" в последней версии. Это не совсем ошибка

Пакетные узлы требуют, чтобы все спрайты, которые вы собираетесь пакетировать, использовали одну и ту же текстуру. Когда вы загружаете спрайт-лист, он использует одну большую текстуру. Когда вы звоните spriteWithFilecocos2d создает текстуру из этого изображения.

Редко, когда вы захотите создать пакетный узел из спрайта, используя spriteWithFile, Единственный сценарий, который я могу придумать, это когда вы хотите рисовать одно и то же изображение много раз. (А не много изображений из одной текстуры).

Короче говоря, то, что вы пытаетесь сделать, не поддерживается и в любом случае не имеет особого смысла, так как эти два спрайта не могут быть пакетными.

Другие вопросы по тегам