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,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];  

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...