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

匿名 (未验证) 提交于 2019-12-03 09:02:45

问题:

I keep getting a crash that says: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSprite: Batched sprites should use the same texture as the batchnode'

I am not quite sure what this means. I googled the crash but got no results. Also this only happens when I go back to my first scene after coming back from the second scene in my game.

I double checked my code and I make sure all the images in my sprite sheets are added as children to the batch node. I also make sure the images in my app that aren't in my sprite sheet are added as a child to my layer and not the batch node.

Anyway what causes this crash and how can I fix it?

Thanks!

Edit1: It seems to be happening on this line in my app:

[self.spriteLeft setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:imageName]]; 

I NSLog imageName and it returns: MyImage.png , then I look in my plist and pvr.ccz that I load and MyImage.png is definitely in there. So I don't know why it is crashing when everything looks right. Also I make sure that I do not use spriteWithFile anywhere where I load an image thats in my sprite sheet.

回答1:

It simply means what it says : when you create the CCSpriteBatchNode object object with a texture, later when you add sprites to the CCSpriteBatchNode, all the sprites you add to the CCSpriteBatchNode MUST be from the same texture. For example:

NSString *spriteName = @"agility"; // an example, this code comes from a method that returns the batchNode                                    // for many status types  NSString *plist = [NSString stringWithFormat:@"status_%@.plist",spriteName]; NSString *textureFileName = [NSString stringWithFormat:@"status_%@.pvr.gz",spriteName]; [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:plist textureFile:textureFileName]; CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithFile:textureFileName];  //  plist has a frame named status_agility_Ok.png  CCSprite *frameStatusOk = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"status_%@_Ok.png",spriteName]];   [batchNode addChild:frameStatusOk]; // this will work, both the sprite and the batch node have the same texture  CCSprite *frameStatusNotOk=[CCSprite spriteWithFile:@"someOtherTextureFile.pvr.gz"]; [batchNode addChild:frameStatusNotOk]; // this will fail an assertion and crash. 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!