【问题标题】:Error when using Multiple Sprite Sheets in Game Layer with Cocos2d使用 Cocos2d 在游戏层中使用多个 Sprite Sheet 时出错
【发布时间】:2011-11-10 08:35:24
【问题描述】:

我有以下代码:

[[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'

有什么想法吗?

【问题讨论】:

    标签: objective-c cocos2d-iphone ccsprite


    【解决方案1】:

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

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

    【讨论】:

    • 这听起来应该修复它。我打算用我的下午把所有东西都放在一个大精灵中。应该可以一并归一。我唯一需要弄清楚的是如何在一张纸上区分不同的精灵(坦克/射线/牛/鸡/人类)。
    • 你有他们的名字。当然你会想要使用像 TexturePacker 这样的纹理图集程序:texturepacker.com
    • 你成功了。但是,我遇到了精灵未显示的其他问题。没有错误或任何东西。我为此创建了另一个问题。如果您有任何想法,请尝试一下。 stackoverflow.com/questions/8159649/…
    猜你喜欢
    • 2012-09-21
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多