cocos2d精灵动画初体验

本文介绍了一种通过代码直接创建动画的方法,无需依赖纹理图册。包括使用`CCSpriteFrame`和`CCAnimation`类进行动画制作,并讨论了如何封装代码以提高复用性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不使用纹理图册创贱动画

NSMutableArray *frames=[NSMutableArray arrayWithCApacity:4];
for(int i=0;i<4;i++){
    NSString *file=[NSString stringWithFormat:@"images%i.png",i];
   CCTexture2D *texture=[[CCTextureCache]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];
}

CCAnimation *anim=[CCAniomation animationWithFrames:frames delay:0.8f];
CCAnimate *animate=[CCAnimate actionWithAnimation:anim];
CCRepeatForever *repeat=[CCRepeatForever actionWithAction:animate];
[self runAction:repeat];

CCAnimationCache类用来存储可按名称访问的动画

CCAnimation *anim=[CCAnimation animationWithFrames:frames delay:1];

[[CCAnimationCache sharedAniametionCache]addAnimation:anim name:@"move"];

CCAnimation *move=[[CCAnimationCache sharedAnimationCache]animationByName:@"move"];

用于创建动画的辅助类别

由于创建动画帧和动画代码对所有的动画通用,因此应该考虑将代码封装到一个辅助方法中,使用OC中的类别扩展CCAnimation类。

@interface CCAnimation(Helper)                                                                                                                                                                                                                                                                                      +(CCAnmationimation *)animationWithFile:(NSString *)name frameCount:(int)franeCount delay:(float)delay;                                                                                                                         @end
接收三个参数---文件名,帧数和动画延时


实现

NSMutableArray *frames=[NSMutableArray arrayWithCapacity:frameCount];

for(int i=0;i<frameCount;i++){

NSString *file=[NSString stringWIthFormat:@"%@%i.png",name,i];

CCTexture2D *texture=[[CCTextureCache shareTextureCache]addImage:file];

CGSize texSize=texture.contentSize;

CGRext texRect=CGRextMake(0,0,texSize.width,texSize.height);

CCSpriteFrame *frame=[CCSpriteFrame frameWithTexture:texture rect:texRect];

}

return [CCAnimation animationWithFrames:frames delay:delay];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值