好奇CC SpriteBatch节点addchild方法

时间:2012-06-19 14:57:27

标签: ios cocos2d-iphone

潜入“使用ios5学习cocos2d游戏开发”时,在ch08

EnemyCache.m

中的

-(id) init
{
    if ((self = [super init]))
    {
        // get any image from the Texture Atlas we're using
        CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"monster-a.png"];
        batch = [CCSpriteBatchNode batchNodeWithTexture:frame.texture];
        [self addChild:batch];

        [self initEnemies];
        [self scheduleUpdate];
    }

    return self;
}

所以批次是纹理“monster-a.png”

EnemyEntity.m的{​​{1}}方法

中的

initWithType

因此返回的对象可能位于3个不同的帧中。从Only the CCSprites that are contained in that texture can be added to the CCSpriteBatchNode开始,很明显,'monster-b.png'不包含在'monster-a.png'中,为什么不同的敌人仍然可以添加到批次中?

1 个答案:

答案 0 :(得分:1)

可以将多个图像放入一个。这种图像称为图集。所以所有的怪物都有一个大的纹理。使用.plist配置文件完成对每个图像的访问,其中存储有关具体图像放置在大纹理中的位置的信息。

它有很多意义,因为切换纹理是一项昂贵的操作。将您需要的所有内容放在一个纹理中并使用批处理要快得多。此外,它还需要更少的GPU内存,因为纹理存储在GPU上的(2 ^ n,2 ^ m)缓冲区中,并提供大纹理,您可以最小化纹理中的自由空间。例如,加载每65像素大小为65的图像将创建128个/ 128像素纹理。