2011-11-09 32 views
1

我有下面的代码在游戏层多雪碧表时:错误使用与cocos2d的

[[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个独立骰子动画。我为每个die预先确定一个值,然后分配一个精灵/动画,最后将该精灵添加到相应的CCSpriteBatchNode。

这将使它通过第一次迭代但随后在第二的错误,给这个错误:

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

有什么想法?

回答

2

错误表明您正在尝试将CCSprite添加到已使用与CCSprite所使用的纹理不同的纹理进行初始化的CCSpriteBatchNode。换句话说:CCSpriteBatchNode和所有CCSprite添加到该批处理节点必须使用相同的纹理。作为一个方面说明:如果牛,射线,坦克,鸡和人的图像都适合于一个纹理图集,那么通过一切手段将它们放入一个纹理图集。纹理地图集的要点不是对图像进行排序和分类,而是加速渲染它们。可以将更多图像打包到同一纹理图集中,渲染速度就越快 - 理想情况下只需一个精灵批处理节点。

+0

这听起来像它应该修复它。我将要度过我的下午,把一切都变成一个大精灵。应该能够把它放在一个整体。唯一需要弄清楚的是如何在一张纸上区分不同的精灵(坦克/雷/牛/鸡/人)。 – rnystrom

+1

你有他们的名字。当然,你会想使用纹理贴图程序,如TexturePacker:http://www.texturepacker.com – LearnCocos2D

+0

你钉了它。不过,我还有一些其他问题没有显示出来。没有错误或任何事情。我为此创造了另一个问题。如果您有任何想法,请尝试一下。 http://stackoverflow.com/questions/8159649/spritesheet-with-cocos2d-not-displaying-anything – rnystrom