Cocos2d-Texture Packer打包纹理贴图集,利用纹理贴图集初始化CCSprite,换图,并进行动画

   利用Texture Packer进行打包纹理贴图集时,add Folder时,没必要把全部的文件都放在同一个文件夹中;

可以按照自己的方式把这些图片放在不同的子目录下(比如sprites\animals,sprites\monsters),之后当你从cocos2d中引用它们的时候只需指定相对路径即可。
例如:add Folder添加的文件夹下还有一个文件夹firstlevel文件;

打包后的plist文件;

 

 

        CCSpriteFrameCache* sp=[CCSpriteFrameCache sharedSpriteFrameCache];
        [sp addSpriteFramesWithFile:@"gamepicture.plist"]; 
        //以上两句话进行了如下操作;
        //寻找工程目录下面和输入的参数名字一样,但是后缀是.png的图片文件。然后把这个文件加入到共享的CCTextureCache中;
        //解析plist文件,追踪所有的sprite在spritesheet中的位置,内部使用CCSpriteFrame对象来追踪这些信息。

 

        CCSprite* back=[CCSprite spriteWithSpriteFrameName:@"firstlevel/warning.png"];
        //根目录下还有一个子文件夹firstlevel;
        back.position=ccp(100, 100);
        [self addChild:back];
 CCSprite* sprite=[CCSprite spriteWithSpriteFrameName:@"checked_shield_green.png"];
        //利用缓存中的图片初始化sprite;
        sprite.position=ccp(200, 200);
        [self addChild:sprite];
      CCSpriteFrame* frame=[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"plus_orange.png"];
        [back setDisplayFrame:frame]; //利用帧缓存换图;CCSpriteFrameCache缓存了所有的CCSpriteFrame

 

+(CCAnimation*) animationWithFrame:(NSString*)frame frameCount:(int)frameCount
                             delay:(float)delay startZero:(BOOL)startAtZero 
{
    NSMutableArray* frames = [NSMutableArray arrayWithCapacity:frameCount]; //有几张图;
    int startNum,endNum;
    if (startAtZero) {
        startNum = 0;
        endNum = frameCount;  //从动画帧命名为0开始;“xx0.png”
    }
    else {
        startNum = 1;
        endNum = frameCount + 1;  //从1开始;"xx1.png"
    }
    for (int i = startNum; i < endNum; i++)
    {
        NSString* file = [NSString stringWithFormat:@"%@%i.png", frame, i];
        CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache]; 
        CCSpriteFrame* frame = [frameCache spriteFrameByName:file];
        [frames addObject:frame];
    }
    return [CCAnimation animationWithFrames:frames delay:delay];
}

顺便说下利用多张图片进行动画:

//单个文件生成动画;改变CGrect
+(CCAnimation*) animationWithFile:(NSString*)name frameCount:(int)frameCount
                            delay:(float)delay startZero:(BOOL)startAtZero 
{
    // 把动画帧作为贴图进行加载,然后生成精灵动画帧
    NSMutableArray* frames = [NSMutableArray arrayWithCapacity:frameCount];
    int startNum,endNum;
    if (startAtZero) {
        startNum = 0;
        endNum = frameCount;
    }
    else {
        startNum = 1;
        endNum = frameCount + 1;
    }

    for (int i = startNum; i < endNum; i++) {
        // 假设所有动画帧文件的名字是”nameX.png”
        NSString* file = [NSString stringWithFormat:@"%@%i%@.png", name, i,isIphone ? @"" : @"-hd"]; 
        CCTexture2D* texture = [[CCTextureCache sharedTextureCache] addImage:file];
        // 假设总是使用整个动画帧文件        CGSize texSize = texture.contentSize;
        CGRect texRect = CGRectMake(0, 0, texSize.width, texSize.height); 
        CCSpriteFrame* frame = [CCSpriteFrame frameWithTexture:texture rect:texRect];
        [frames addObject:frame];
    }
    return [CCAnimation animationWithFrames:frames delay:delay];
}
        //CCTexture2D 通过图片 文本  数据生成OpenGL 2D纹理。

      //CCTextureCache 可以理解为CCTexture2D的缓存集合

 

 

 

posted @ 2012-04-20 22:19  moon_7  阅读(1084)  评论(0编辑  收藏  举报