这一篇是讲一下如何在cocos2d中实现动画。

实现动画的步骤:

  1. 加载帧
  2. 生成动画对象
  3. 运行动画

加载帧我用过两种方式:

  1. 第一种是使用.plist文件,通过CCSpriteFrameCache读取动画帧,并加载到CCAnimation对象中,如下:

    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"animate.plist"];NSMutableArray *walkAnimFrames = [NSMutableArray array];
    for(int i = 1; i <= 8; ++i) {[walkAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"bear%d.png", i]]];
    }
    CCAnimation *walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.1f];    id actions = [ CCRepeatForeveractionWithAction: [CCAnimateactionWithAnimation:walkAnim restoreOriginalFrame:NO] ];
    [sprite runAction:actions];

    这里面的 .plist 是什么呢?

    我们知道动画实际上就是由一帧帧的图片连续播放产生的,那么我们在cocos2d中实现动画时,首先要把所有的动画帧加载到内存中,但一张一张的加载比较费时费事,所有,就会有工具把所有的图片 揉成一个图片,横七竖八的放到一个图片文件中,为了再把这些图片分离出来,就需要一个数据文件记载每一个图片的位置及其大小,这个文件就是上面提到的 .plist 文件。

    下图左边就是图片文件,而右侧的是 .plist 文件的内容。

  1. .plist 文件可以通过Zwoptex 或 TexturePacker程序生成, Zwoptex的flash版本是免费的,桌面版是收费的,TexturePacker初级版是免费的,高级版是收费的。
  2. 如果你不想花钱买上面这两个软件,有什么办法不用 .plist 文件的形式加载动画吗?答案是有,目前我就是不用 .plist 的形式加载动画的,下面先给出代码:
    CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:fileName];
    NSMutableArray *animFrames = [NSMutableArray array];
    [animFrames removeAllObjects];for (int i=0; i<frameCount; i++) {CCSpriteFrame *frame = [CCSpriteFrame frameWithTexture:texture rect:CGRectMake(spriteWidth*i,0, spriteWidth,spriteHeight)];[animFrames addObject:frame];
    }
    CCAnimation *animation =[CCAnimation animationWithFrames:animFrames delay:delay];id actions = [ CCRepeatForever actionWithAction: [CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO] ];
    [sprite runAction:actions];
    

    这种方法的不同主要在于,加载帧时,使用的是  CCSpriteFrame frameWithTexture:(CCTexture2D*)texture rect:(CGRect)rect ,也就是,直接加载图片,然后使用 CGRect 来指定加载图片的位置。

    比如,上面的代码中表示的就是动画图片是按照水平排列的,每个动画帧的宽是 spriteWidth, 高是 spriteHeight,然后,通过水平移动坐标,来一个一个的加载图片。

两种方式,区别仅仅在于如何加载动画帧,其他的步骤是一样的。


下面说一下如何改变精灵的图片。当你的操纵的精灵,吃了什么东东,然后变身了,那么显示在屏幕上的图片就要变化,那么如何设定呢?

  1. CCSpriteFrame *frame = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@"grossini_dance_02.png"];
    [sprite1 setDisplayFrame:frame];

    这种方法适用于适用 .plist的方式加载帧的方式,因为每一个帧都有自己的名字,所以很容易通过名字取得指定的帧。

  2. [self setTextureRect:CGRectMake(80, 0, 40, 40)];
    

    这种方式适用于我第二种加载动画的方式,这种方式没有像.plist那种方式那样指定了每个帧的名字,所以,可以通过直接指定 位置的方式来替换 精灵的图片。

  3. [self setTexture:(CCTexture2D *) texture];

    这种的话,直接适用 CCTexture2D对象来替换。

关于他们有什么不同,有人说 setDisplayFrame 不会改变精灵的大小,替换帧后,会调整显示比例是精灵的大小不改变,而setTexture会改变精灵的大小。

cocos2d的常用动作及效果总结之五:Animation相关推荐

  1. cocos2dx学习笔记之常用动作类Action详解

    cocos2dx对动作类进行了精细的划分,最常用的是根据时间属性划分的瞬时动作类ActionInstant和延时动作类ActionInterval及其子类,继承关系如下: 本文对常用动作做了测试,代码 ...

  2. 常用的客观效果指标和测试方法

    乐学乐 随笔 - 37, 文章 - 0, 评论 - 0, 引用 - 0 LCD 常用的客观效果指标和测试方法 1.DPI--精密度: 评分标准 DPI 评分 DPI<200 50 200≤DPI ...

  3. 机器学习29:Sklearn库常用分类器及效果比较

    机器学习29:Sklearn库常用分类器及效果比较 1.Sklearn库常用分类器: #[1] KNN Classifier # k-近邻分类器 from sklearn.neighbors impo ...

  4. 01 NCC常用动作脚本

    01 NCC常用动作脚本 节点 脚本入口 销售出库 N_4C_ 调拨出库 N_4Y_ 销售订单 N_30_ 调拨订单 N_5X_ 采购订单 N_21_ 预订单 N_38_ 材料出库 N_4D_ 库存采 ...

  5. 大气磅礴的网站效果 scroll+easing+animation+水平、竖直滚动

    像酒店 酒吧 咖啡店连锁 小型餐厅 音乐网站等等 都可以采用我如下所讲的大气磅礴的网站效果 scroll+easing+animation+水平.竖直滚动... 主要运用的技术有jquery easi ...

  6. 机器人系统常用仿真软件介绍效果与评价指标

    本文转载自博主zhangrelay:http://blog.csdn.net/ZhangRelay/article/details/42586491 转载过来,方便自己查看,感谢原博主. 机器人系统常 ...

  7. 【Aladdin-Unity3D-Shader编程】之八-2D图常用的Shader效果

    前言 Shader效果常用于3D模型,但2D图也有不少常用的效果,例如:圆角头像,图片灰态,边缘着色等等,下面我就依次做一个介绍. 图片灰态 效果 核心思路 在片元着色器里面对每个图元进行采样,将图元 ...

  8. JSP常用动作元素有哪些?作用是什么?

    JSP 动作元素有哪些?作用是什么? jsp的标准动作元素有十种之多,但是常用的就以下这六种 jsp:include:在页面被请求的时候引入一个文件. jsp:useBean:寻找或者实例化一个Jav ...

  9. Cocos2d:使用 CCCamera 做滚动效果 (Four Ways of Scrolling with Cocos2D)

    原版的:http://www.koboldtouch.com/display/IDCAR/Four+Ways+of+Scrolling+with+Cocos2D There are two class ...

最新文章

  1. 网络营销外包——网络营销外包专员是怎样提升网站收录概率的?
  2. Boost:异步操作,涉及重新打包多个操作,但选择仅调用其中一个的测试程序
  3. 中标麒麟linux系统忘记root密码,中标麒麟(龙芯CPU)--忘记root密码怎么修改?
  4. sudo dpkg 找不到命令_【干货】Linux中实用但很小众的11个炫酷终端命令
  5. Hbase Java API详解
  6. net-speeder
  7. LinkedList专题2
  8. 从谷歌宕机事件认识互联网工作原理
  9. 深度学习之优化详解:batch normalization
  10. IDEA连接mysql报Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' 的错误
  11. R 语言 Windows 环境 安装与Windows下制作R的package--Rtools
  12. android 服务是什么问题,Android Studio 中的Service问题
  13. Android Layout标签之-viewStub,requestFocus,merge,include
  14. 海康IP摄像头rtsp解码(ubuntu上使用)
  15. php文本框如何设置高度,更改文本框高度?
  16. java blowfish 算法_Blowfish加密算法Java实现
  17. {king:pagelist/} php sp2,kingcms PHP Sp2留言薄怎么显示不出留言呢?
  18. How to get current full screen dimention and orientation in run time
  19. linux编译aborted,Ubuntu Linux上编译kernel出错__stack_chk_fail
  20. 基于无线信号的手势识别研究现状调查

热门文章

  1. Spring-Cloud 学习笔记-(4)负载均衡器Ribbon
  2. [USACO15FEB]Superbull (最小生成树)
  3. 关于arraylist的扩容机制
  4. 【Alpha阶段汇总】成果展示与体验总结
  5. 用Ant编译Flex项目的几点注意事项
  6. [导入]创建、查询、修改带名称空间的 XML 文件的例子
  7. Swift傻傻分不清楚系列(五) 字符串和字符
  8. Vue多字段下的非空判断(new Promise)
  9. webpack — 概述介绍
  10. 关于字符串比较时候出现的空指针问题的坑