将正常的CCSprite添加到CCSpriteBatchNode崩溃

时间:2014-09-04 06:34:49

标签: cocos2d-iphone 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");

P.S。 :by" normal"我的意思是不从* .plist文件中获取

1 个答案:

答案 0 :(得分:2)

首先,我要更新cocos2D。但是,这不是你的问题,无论如何可能不会在最新版本中“修复”。这不是一个真正的错误

批处理节点要求您要批处理的所有精灵都使用相同的纹理。加载精灵表时,它使用一个大的纹理。当您致电spriteWithFile时,cocos2d会根据该图片创建纹理。

您很少需要使用spriteWithFile从精灵创建批处理节点。我能想到的唯一场景是你想要多次绘制相同的图像。 (而不是来自相同纹理的许多图像)。

简而言之,你想要做的事情是不受支持的,无论如何都没有多大意义,因为这两个精灵不会被殴打。