1

这是我收到的错误:

*由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“CCSprite: setTexture 在使用 CCSpriteBatchNode 渲染精灵时不起作用”

当我试图通过动画运行时。

这是我创作的动画:

_tokenAnimation = [[CCAnimation alloc] init];
int frameCount = 12;
for (int i = 1; i <= frameCount; i++)
{
    CCSpriteFrame *frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"Token Ball 000%d.png", i]];
    [_tokenAnimation addFrame:frame delay:0.1];
}

这是我在调用动画-以前没看过吗?

GameObject *creditPickup = [_creditPickups nextSprite];

    creditPickup.position = ccp(_creditPosition.x, _creditPosition.y);
    [creditPickup revive];

    [creditPickup runAction:[CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:_tokenAnimation restoreOriginalFrame:NO]]];
    [creditPickup runAction: [CCSequence actions:
                              [CCMoveBy actionWithDuration:5.0 position:ccp(-_winSize.width*1.5, 0)],
                              [CCCallFuncN actionWithTarget:self selector:@selector(invisNode:)], nil]];

我听说 CCSpriteBatchNode 不好?如果是这样,我怎样才能改变我的精灵表的阅读?

还有什么我做错了吗?

4

2 回答 2

2

你的问题就在那里:

CCSprite:当使用 CCSpriteBatchNode 渲染精灵时,setTexture 不起作用

这意味着作为子项添加到 CCSpriteBatchNode 的 CCSprite 中没有一个可以运行 setTexture 方法。原因是它们都必须使用与其父 CCSpriteBatchNode 相同的纹理。所以 cocos2d 在 sprite-batched 的 sprite 上禁用该方法。

在您的情况下,很可能动画的至少一个精灵帧不在其子精灵播放该动画的 CCSpriteBatchNode 使用的纹理中。

I hear something about CCSpriteBatchNode's being bad?

是的,这很糟糕。太糟糕了,它会进行月球漫步。:)

于 2012-09-12T21:05:46.030 回答
0

试试这个:

CCAnimation* animation;

NSMutableArray *animFrames = [NSMutableArray array]; 
CCSpriteFrameCache *cache = [CCSpriteFrameCache sharedSpriteFrameCache];

for(int i=0;i<=12;i++)
{
    CCSpriteFrame *frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"Token Ball 000%d.png", i]]
    [animFrames addObject:frame];
}


animation = [CCAnimation animationWithSpriteFrames:animFrames];

animation.delayPerUnit =  0.1f;
animation.restoreOriginalFrame = NO;


CCAnimate *AnimAction  = [CCAnimate actionWithAnimation:animation];

CCRepeatForever *anim = [CCRepeatForever actionWithAction:AnimAction];

[creditPickup runAction:anim];
于 2012-09-12T16:08:28.230 回答