2014-10-21 2 views
0

В моей игре cocos2d есть что-то странное. Я не могу понять проблему.Weird nosense CCSpriteBatchNode Exception

У меня есть очень простая структура файлов для моей игры, 1 уровень входа, 1 уровень основного меню, 1 игровой слой.

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

Теперь я закончил игру, я добавил назад главное меню и когда игровой слой вызывается из него, он сработает !! ??

он никогда не сбой, если я пропускаю слой основного меню.

Edit:

Важна, Если я удалить основной слой меню он работает нормально ... Главное меню не добавляет текстуру атласа, есть только один я использую весь всю игру.

это сообщение об ошибке:

"CCSprite: Batched sprites should use the same texture as the batchnode" 

из этого gamelayer код:

_myitens = [CCSpriteBatchNode batchNodeWithFile:@"mytextureatlas.png"; 

Самое смешное Главное меню Layer только функция должна иметь кнопку (изображение из файла, а не текстуры атлас), который вызывает игровой слой ....

Это очень запутанно. Я не вижу, как подойти к этой проблеме.

любые советы действительны.

+0

добавить точку останова исключения, вы найдете точную линию проблемы, то вы можете проверить, какие текстуры и рамка спрайта спрайт с помощью – LearnCocos2D

+0

я добавить, исключение обжигает в моем воспроизводимом спрайте на setDisplayFrame перезаписывать, когда я вызываю его базовый класс [super setDisplayFrame: paramFrame]; – RollRoll

+0

не может идентифицировать фрейм с проблемой, используя cocos2d 2.x – RollRoll

ответ

0

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

Например, если у вас есть mytextureatlas.plist и notmytextureatlas.plist, и оба содержат изображение с тем же именем, скажем, «player.png». Если вы впервые загрузите mytextureatlas, все будет хорошо. Однако, когда вы сначала загружаете notmytextureatlas, а затем пытаетесь добавить спрайт player.png в пакетный узел, используя mytextureatlas, cocos2d фактически использует player.png из notmytextureatlas, вызывая эту ошибку.

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

+0

В игре есть только один атлас текстуры, если я удаляю слой основного меню, он отлично работает – RollRoll

+0

Я действительно безнадежен, как только один текстурный атлас в batchnode жалуются на то, что ... – RollRoll

0

Как добавить спрайты к _myitems? Вы добавляете детей, которые были созданы с другой текстурой, это значение ошибки, и это то, что происходит.

Исключение не нонсенс, это означает точное условие, которое где-то вы не повиноваться: batchnode должен иметь ребенок инициализирован с одинаковой текстурой самого batchnode (и это имеет смысл, так как он используется для пакетные вызовы GL).

Например:

_myitems = [CCSpriteBatchNode batchNodeWithFile:@"mytextureatlas.png"]; 
[_myitems addChild:[CCSprite spriteWithTexture:@"othertexture.png"]]; 

будет генерировать ошибку.Вы должны попробовать:

[_myitems addChild:[CCSprite spriteWithTexture:_myitems.textureAtlas.texture]]; 
+0

все мои текстуры используются из одного и того же batchnode, есть только один для всей игры. Я добавляю спрайт к нему точно так же [_myitems addChild: _heroSprite]; – RollRoll