在cocos2d中优化动画失败

时间:2013-02-13 13:43:13

标签: ios cocos2d-iphone

当我没有优化动画时,它运行良好。但是当我优化动画时,程序崩溃了。而Xcode日志说:

  

断言失败 - [CCSpriteBatchNode addChild:z:tag:],/ Users / hanpengbo / Documents / Xcode / cocos2d_helloWorld / cocos2d_helloWorld / libs / coco s2d / CCSpriteBatchNode.m:183

在CCSpriteBatchNode.m:183中,有

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

这是我的代码

// cache
    CCSpriteFrameCache *cache=[CCSpriteFrameCache sharedSpriteFrameCache];
    [cache addSpriteFramesWithFile:@"birdAtlas.plist"];

    // frame array
    NSMutableArray *framesArray=[NSMutableArray array];
    for (int i=1; i<10; i++) {
        NSString *frameName=[NSString stringWithFormat:@"bird%d.png", i];
        id frameObject=[cache spriteFrameByName:frameName];
        [framesArray addObject:frameObject];
    }

    // animation object
    id animObject=[CCAnimation animationWithFrames:framesArray delay:0.1];

    // animation action
    id animAction=[CCAnimate actionWithAnimation:animObject restoreOriginalFrame:NO];
    animAction=[CCRepeatForever actionWithAction:animAction];

    // sprite
    cocosGuy = [CCSprite spriteWithFile: @"Icon.png"];//cocosGuy is CCSprite,declared earler
    cocosGuy.position = ccp( 200, 300 );

    // batchNode
    CCSpriteBatchNode *batchNode=[CCSpriteBatchNode batchNodeWithFile:@"birdAtlas.png"];
    [self addChild:batchNode];
    [batchNode addChild:cocosGuy];

    [cocosGuy runAction:animAction];

更新: 这是修正后的代码,效果很好

    // batchNode
    CCSpriteBatchNode *batchNode=[CCSpriteBatchNode batchNodeWithFile:@"birdAtlas.png"];
    [cocosGuy setTexture:[batchNode texture]];
    [self addChild:batchNode];
    [batchNode addChild:cocosGuy];

1 个答案:

答案 0 :(得分:1)

为此,你的Icon.png纹理应该在birdAtlas.png纹理中,并在.plist中有适当的声明。 Batchnodes 1)是用一个纹理(只有一个)创建的,2)只接受来自SAME纹理的儿童精灵。

...而且,我不知道你的意图,但通常你会有

CCSprite *cocosGuy = [CCSprite spriteWithSpriteFrame:[cache spriteFrameByName:@"bird1.png"];

在这种情况下,我认为批处理节点添加将起作用。

...并且,如果纹理仅包含该动画的动画帧,则不确定使用批处理节点对动画有任何影响。框架一次显示一个,所以我不认为你将受益于批量绘制调用。