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的缓存集合