猴子原创, 欢迎转载,转载请在明显处注明! 谢谢。

原文地址:http://blog.csdn.net/yanghuiliu/article/details/6933421

之前我介绍过cocos2d-x的帧动画实现,今天我把帧动画详细写一下。

帧动画就是很多张png的序列图实现轮流播放产生动画效果。

那么首先我们要一套动画的序列图,没有图的可以看引擎例子里面的图。很多张图我们可以采用TP工具将它们压缩到一张png里面去,这样程序只需要读取一次就行了,提高效率。

比如我将这里的6张图压成了一个png,TP会产生一个所有图的png和一个plist描述文件,plist很像xml,它描述了每一张图的位置,大小等信息。程序就是通过plist文件在合成的大png里面找到每一张图的。

合成的大图叫fei.png,对应的fei.plist。

里面的小图。叫 飞0001.png、飞0002.png、.........、飞0006.png

下面开始程序的创建

[cpp] view plaincopy
  1. //创建cache
  2. CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
  3. char strPlist[64] = {0};
  4. char strPng[64] = {0};
  5. sprintf(strPlist,"fei.plist");
  6. //sprintf(strPng,"fei.pvr.ccz");
  7. sprintf(strPng,"fei.png");
  8. cache->addSpriteFramesWithFile(strPlist, strPng);
  9. //创建动画每一帧,从cache里面读取
  10. CCMutableArray<CCSpriteFrame*>* animFrames = new CCMutableArray<CCSpriteFrame*>(6);
  11. char str[64] = {0};
  12. for(int i = 1; i <= 6; i++)
  13. {
  14. sprintf(str, "飞%04d.png", i);
  15. CCSpriteFrame* frame = cache->spriteFrameByName( str );
  16. animFrames->addObject(frame);
  17. }
  18. CCAnimation* animation = CCAnimation::animationWithFrames(animFrames,0.04f);
  19. CCRepeatForever* mFly=CCRepeatForever::actionWithAction( CCAnimate::actionWithAnimation(animation, false));
  20. animFrames->release();
  21. cache->removeSpriteFramesFromFile(strPlist);

这里的mFly就是一个创建好的action。当然它是可以重复播放的。你要是只想播放一次。

那么替换成

CCActionInterval* mFly=CCAnimate::actionWithAnimation(animation,true);

你可能看到了我里面注释了一行代码,就是我不是压缩成了png,而是压缩成了pvr.ccz。这种格式效率更高。

pvr是苹果自己支持的图片格式,但是比较占内存,压缩成ccz后就很小了。用法一样。

转载于:https://www.cnblogs.com/willbin/archive/2013/03/27/2984064.html

cocos2d-x帧动画实现(续)相关推荐

  1. cocos2d+lua实现帧动画播放

    使用Cocos2d播放帧动画的方法有两种: 先来介绍一下流程: 1.得到动画的每一帧的数组FrameArray 2.将帧动画数组包装成Animation对象 3.将Animation对象转化为可以播放 ...

  2. cocos2d-x 帧动画学习

    今天学了一下cocos2d-x的帧动画,在这里记录一下,如果有什么错误的地方还请大家指出,我及时改正.在这里我创建了一个SpriterLayer的类,他是继承自CClayer的,在这里我先把头文件的定 ...

  3. html5中Canvas、绘制线条模糊、常见绘制工具、绘制基本图形、绘制图片、面向对象的方式绘制图形图片、绘制文本、帧动画绘制

    Canvas容器: canvas标签用来定义图像的容器,必须配合脚本来绘制图像,canvas也运用于游戏开发.注意:canvas绘制图时会出现线条模糊情况,这是因为显示屏像素和canvas中定义的一个 ...

  4. 骨骼动画详解 和 帧动画

     骨骼动画 vs. 精灵表(sprite sheets) 创建动画又快又简单的方法是使用"精灵表"(sprite sheets).当你意识到游戏需要大量动画,内存消耗会涨上来, ...

  5. MAC_COCOS2D-X学习——Cocos2dx帧动画实现火焰效果

    这一次来讲讲帧动画,来做一个酷炫的火焰效果,首先看看效果 首先,创建helloworld项目,先编译一下. 接着创建MyAction.hpp和MyAction.cpp.记得勾选helloworld-d ...

  6. Cocoa利用TexturePacker创建的纹理图集实现角色的帧动画

    Cocoa利用TexturePacker创建的纹理图集实现角色的帧动画 by 大熊猫侯佩 什么是TexturePacker TexturePacker是一个非常棒的纹理集制作工具,广泛应用在2D游戏的 ...

  7. Android动画之帧动画和补间动画

    Android系统提供三种动画:帧动画.补间动画和属性动画.这里先分析总结帧动画和补间动画. FrameAnimation 帧动画,通俗来说就是按照图片动作顺序依次播放来形成动画,创建帧动画可以用 x ...

  8. Android 逐帧动画(Frame)

    Android 逐帧动画(Frame)  很好理解就是将多张图片放到一个容器里面通过控制这些图片一帧一张图片从而形成动画 使用的使用通过AnimationDrawable 加载放好的图片 然后通过调用 ...

  9. android帧动画实现方法之一

    好多动画离不开帧动画的使用,下面就实现帧动画的制作方式之一,以后会推出其他方法. 上面是文件存放位置. a.xml文件的代码如下: <?xml version="1.0" e ...

最新文章

  1. 【HDU2683 TCE-frep number system 完全数+二项展开式】
  2. Linux环境安装Kafka2.6.0
  3. 2000年考研英语阅读理解文章三
  4. MySQL5.7升级到8.0 之后,配合ubantu18.04遇到的常规问题以及非常规问题的解决方案
  5. matlab如何导入多文本数据,将文本文件中的混合数据导入表
  6. 80.简单搭建nodeJS服务,访问本地站点文件
  7. android 半透明背景
  8. 智慧城管核心应用系统建设
  9. 与时俱进的迅捷多功能转换器
  10. 中国石油大学《输气管道设计与管理(含课程设计)》第三阶段在线作业
  11. 教你破解已转换为EXE格式的Bat
  12. HUD玻璃检测工装背景简介
  13. log(五)——MDC总结
  14. update与fixedupdate检测键盘输入的出现的问题
  15. GitGitHub入门基础
  16. 免费网站翻译整个文档并保留原格式
  17. Scrapy爬取贝壳网并存入csv
  18. 机器学习算法实践——K-Means算法与图像分割
  19. Python 计算任意两向量之间的夹角
  20. 第二章:并行硬件和并行软件

热门文章

  1. Oracle 在 Linux 下移动控制文件步骤
  2. Linux之alias命令
  3. 网络协议 3 - 从物理层到 MAC 层
  4. 如何避免Scrum敏捷开发团队反思会形式化,海星法介绍
  5. Kafka: Producer (0.10.0.0)
  6. VDI中创建集合时使用Sysprep应答文件碰到的问题
  7. 雪,是死掉的雨,是雨的精魂
  8. Microsoft Data Access Components(MDAC) 结构以及一些连接SQL数据库的架构基础
  9. 连续和问题C语言,内存连续的有关问题
  10. 【毕业设计】JAVA文件压缩与解压缩实践(源代码+论文)