1

我有以下代码:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"cow_sprite.plist"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"ray_sprite.plist"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"chicken_sprite.plist"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"tank_sprite.plist"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"human_sprite.plist"];

self.raySpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"ray_sprite.png"];
self.tankSpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"tank_sprite.png"];
self.chickenSpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"chicken_sprite.png"];
self.cowSpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"cow_sprite.png"];
self.humanSpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"human_sprite.png"];

[self addChild:self.raySpriteSheet];
[self addChild:self.tankSpriteSheet];
[self addChild:self.chickenSpriteSheet];
[self addChild:self.cowSpriteSheet];
[self addChild:self.humanSpriteSheet];

for (int i = 0; i < 13; ++i) {
    Dice* d = [[Dice alloc] initRandom];

    if (d.fileNum == 0 || d.fileNum == 1) {
        [self.raySpriteSheet addChild:d.sprite];
    }else if(d.fileNum == 2){
        [self.tankSpriteSheet addChild:d.sprite];
    }else if(d.fileNum == 3){
        [self.chickenSpriteSheet addChild:d.sprite];
    }else if(d.fileNum == 4){
        [self.cowSpriteSheet addChild:d.sprite];
    }else if(d.fileNum == 5){
        [self.humanSpriteSheet addChild:d.sprite];
    }
    [rollDiceArray addObject:d];
}

这个想法是我希望能够为 5 个单独的骰子动画使用 5 个单独的精灵表。我为每个骰子预先确定一个值,然后分配一个精灵/动画,最后将该精灵添加到适当的 CCSpriteBatchNode。

它将通过第一次迭代,但在第二次迭代时出错,给出以下错误:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSprite is not using the same texture id'

有什么想法吗?

4

1 回答 1

2

该错误表明您正在尝试将 CCSprite 添加到 CCSpriteBatchNode 中,该 CCSpriteBatchNode 使用与 CCSprite 正在使用的纹理不同的纹理进行初始化。换句话说:CCSpriteBatchNode 和添加到该批处理节点的所有 CCSprite必须使用相同的纹理。

附带说明:如果牛、鳐鱼、坦克、鸡和人类图像都放入一个纹理图集中,那么请务必将它们放入一个纹理图集中。纹理图集的重点不是对图像进行排序和分类,而是加快渲染它们。可以打包到同一个纹理图集中的图像越多,渲染它们的速度就越快——理想情况下,只需一个精灵批处理节点。

于 2011-11-10T00:35:24.217 回答