加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 19:08:16 所属栏目:百科 来源:网络整理
导读:下面来看代码 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];}-(

下面来看代码 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];  

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读