Cocos2d 使用纹理图册,更方便生成精灵动画

下面来看代码 fishSprite.h:

#import <Foundation/Foundation.h>
#import "cocos2d.h"

@interface fishSprite : CCSprite {
    
}
+(id)fish;
@end

fishSprite.m:

#import "fishSprite.h"


@implementation fishSprite
+(id)fish
{
    return [[self alloc]initWithImage];
}

-(id)initWithImage
{
    if ((self=[super init])) {
        
        
        [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"fish.plist"];
        // 将所有fish.plist相关的精灵添加到缓存里;
        
        NSMutableArray *frameArray = [NSMutableArray array];
        
        for (int i = 1; i<15; i++) {
            [frameArray addObject:
             [[CCSpriteFrameCache sharedSpriteFrameCache ]spriteFrameByName:
              [NSString stringWithFormat:@"fish%d.png",i]]];
        }
        //将帧添加到数组里,用该数组生成动画;
        
        CCAnimation *fishAnimation = [CCAnimation animationWithSpriteFrames:frameArray delay:0.05f];
        
        CCAnimate *animate = [CCAnimate actionWithAnimation:fishAnimation];
        
       
        
               
             
        [self runAction:[CCRepeatForever actionWithAction:animate]];
        
        
        
        
        
        
        
        
        
        
        
//        NSMutableArray* frames = [NSMutableArray arrayWithCapacity:18];
//        //生成一个18的Array;
//        
//        for (int i = 1; i < 19; i++)
//        {
//            NSString *pngFile = [NSString stringWithFormat:@"fish%d.png",i];
//            
//            //利用已知图片名生成纹理;
//            CCTexture2D *texture = [[CCTextureCache sharedTextureCache]addImage:pngFile];
//            
//            //利用纹理生成组成动画的帧;
//            CCSpriteFrame *frame = [CCSpriteFrame frameWithTexture:texture rect:CGRectMake(0, 0, texture.contentSize.width, texture.contentSize.height)];
//            
//            //将生成的帧添加到数组中,共18个,之后我们要用这18个frame来构成动画;
//            [frames addObject:frame];
//            
//        }
//        
//        //利用帧数组生成一个动画,设定帧与帧之间的切换频率为0.05;
//        CCAnimation *animation =[CCAnimation animationWithSpriteFrames:frames delay:0.05];
//        
//        //用CCAnimate将生成的CCAnimation转成可以用精灵操作的动作action:
//        CCAnimate *animate = [CCAnimate actionWithAnimation:animation];
//        
//        //设置为repeat
//        CCRepeatForever *repeat = [CCRepeatForever actionWithAction:animate];
//        
//        //执行
//        
//       
//        
//        
//       
//        [self runAction:repeat];
//        //这样,如果该精灵一被实例化成功,就会动起来;

    }
    return self;
}
@end

在fishSprite.m中,下面注释的代码是之前我们没有使用纹理图册时一个纹理一个纹理添加的代码,另外需要注意的是,昨天我做纹理图册的时候没有注意,只添加了15张图片,完整的是18张,所以for循环中的个数大家知道就行了,纹理图册的循环次数是和plist里面添加的纹理图片的个数相对应的;


这样将fishSprite定义好后,我们在图层上添加时,只需要如下这样调用就能创建一个可以不停动画的精灵;

//在层上添加精灵;  
fishSprite *fish = [fishSprite fish];  
fish.position = ccp(160,120);  
  
[self addChild:fish];  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值