这几天在看控件类,临时没有想好实际运用的方向。单纯的创建网上已经有非常多这方面的样例,我就不写了。接下来是学习精灵类。精灵类若是单独学习也是非常easy。于是我加了一些有关动画方面的知识点与精灵类一起使用。让精灵播放简单的帧动画。

首先我们准备好动画素材,我在网上下了一个小游戏。将里面的素材做成了png和plist大图以供程序调用。我是用TexturePackerGUI来生成plist的。我选的是一个简单的待机动作,我们的目的就是让这张图动起来~

第一种方式:使用CCSpriteFrame

  1. // 利用 CCTexture2D读取图片
  2. CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage("hero/hero_standby.png");
  3.  
  4. // 生成序列帧。CCRectMake的4个參数(x,y,width,height)分别代表取该图片中坐标为x,y宽高为width,height的图
  5. // 以下读出4个图暂存在frame中
  6. CCSpriteFrame *frame0 = CCSpriteFrame::createWithTexture(texture, CCRectMake(0, 114 * 0, 66, 114));
  7. CCSpriteFrame *frame1 = CCSpriteFrame::createWithTexture(texture, CCRectMake(66.25, 114 * 0, 66, 114));
  8. CCSpriteFrame *frame2 = CCSpriteFrame::createWithTexture(texture, CCRectMake(66.25*2, 114 * 0, 66, 114));
  9. CCSpriteFrame *frame3 = CCSpriteFrame::createWithTexture(texture, CCRectMake(66.25 * 3, 114 * 0, 66, 114));
  10.  
  11. //以下这行代码是设置默认图片和初始位置,由于COCOS2dx须要默认原始的图片
  12. CCSprite* sprite = CCSprite::createWithSpriteFrame(frame0);
  13. sprite->setPosition(ccp(size.width / 2, size.height / 2 +100));
  14. addChild(sprite);
  15.  
  16. //将5张读出来的图加到一个动画序列
  17. CCArray *animFrames = new CCArray(4);
  18. animFrames->addObject(frame0);
  19. animFrames->addObject(frame1);
  20. animFrames->addObject(frame2);
  21. animFrames->addObject(frame3);
  22.  
  23. //将5个动画帧生成CCAnimation对象 0.2f代表每一个之间的间隔时间
  24. CCAnimation *animation = CCAnimation::createWithSpriteFrames(animFrames, 0.2f);
  25.  
  26. //最后依据动画模板创建动画
  27. CCAnimate *animate = CCAnimate::create(animation);
  28.  
  29. //给精灵设置之前创建好的动作
  30. sprite->runAction(CCRepeatForever::create(animate));

另外一种方式:使用CCSpriteFrameCache类读取plist

  1. //将你须要的图片做成plist,然后用CCSpriteFrameCache读取出来
  2. CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
  3. cache->addSpriteFramesWithFile("hero/hero_standby.plist", "hero/hero_standby.png");
  4.  
  5. //创建精灵并将读取出来的第一张图片作为默认图片
  6. CCSprite* sprite1 = CCSprite::createWithSpriteFrame(cache->spriteFrameByName("20005_1.png"));
  7. sprite1->setPosition(ccp(size.width / 2, size.height / 2 - 100));
  8. addChild(sprite1);
  9.  
  10. //相同设置动画序列。这下面的步骤与第一种方式相同了
  11. CCArray *animFrames1 = new CCArray(4);
  12. animFrames1->addObject(cache->spriteFrameByName("20005_1.png"));
  13. animFrames1->addObject(cache->spriteFrameByName("20005_3.png"));
  14. animFrames1->addObject(cache->spriteFrameByName("20005_5.png"));
  15. animFrames1->addObject(cache->spriteFrameByName("20005_7.png"));
  16.  
  17. CCAnimation *animation1 = CCAnimation::createWithSpriteFrames(animFrames1, 0.2f);
  18. CCAnimate *animate1 = CCAnimate::create(animation1);
  19. sprite1->runAction(CCRepeatForever::create(animate1));

认真写过这两种方式而且理解之后就能发现,第一种方式有些蛋疼,须要自己找图片位置,我也不知道是不是还有其它更加便捷的方式,只是非常明显另外一种方式更加科学。不知道还有没其它更好的方法呢?知道的同学能够交流一下哦~

可能有人不知道plist是什么。详细我就不解释了。自己去查查,我仅仅说我们这里能用到的信息,里面记录了图片的名称和在大图中的位置,所以直接读取plist是很方便的。

做完这个样例还是有些小激动的。由于最终有点认为自己在做游戏了,嘿嘿。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

Cocos2d-x学习笔记(五岁以下儿童) 精灵两种方式播放动画的更多相关文章

  1. react学习笔记1之声明组件的两种方式

    //定义组件有两种方式,函数和类 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } class ...

  2. angular学习笔记(三)-视图绑定数据的两种方式

    绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...

  3. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  4. Android(java)学习笔记191:Android数据存储5种方式总结

    1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...

  5. MySQL学习笔记(2) - 修改MySQL提示符的两种方法

    学习于慕课网 http://www.imooc.com/video/1806 1.方法一: cmd中处于未登录状态时,输入 mysql -uroot -p自己的密码 --prompt 新的提示符 示例 ...

  6. Android(java)学习笔记134:Android数据存储5种方式总结

    1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...

  7. 十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象

    一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象 ...

  8. Android(java)学习笔记147:textView 添加超链接(两种实现方式,,区别于WebView)

    1.方式1: LinearLayout layout = new LinearLayout(this); LinearLayout.LayoutParams params = new LinearLa ...

  9. C# Emgu CV学习笔记二之图像读写的两种方法

    http://blog.csdn.net/marvinhong/article/details/6800450 图像显示在控件loadPictureBox上 方法一 //读取图像001.jpg Int ...

随机推荐

  1. java基础---->摘要算法的介绍 (转)

    数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(Hash)算法. ...

  2. uva-211-The Domino Effect

    http://uva.onlinejudge.org/external/2/211.html http://uva.onlinejudge.org/external/2/211.pdf 题意:每一种骨 ...

  3. 千万别用模板给的list.size()巨坑

    要用!list.empty()取代i<list.size();否则就不会AC了.

  4. jquery实现鼠标拖动

    <html>   <head>   <script type='text/javascript' src='js/jquery-1.5.1.js'></scr ...

  5. 利用linux BT5来破解无线 破解无线

    下面是自己整理的详细步骤,版权小冯全部. 一.提前准备好bt5的ISO镜像文件.和虚拟机,提前把虚拟机安装好.然后进行安装bt5. 二.进入页面,点击statx.进入可视化界面. 三.进入主界面后.下 ...

  6. java中怎么终止一个线程的执行----个人学习心得

    参考了一下两个网站的介绍: ①:http://blog.csdn.net/liuhanhan512/article/details/7077601 ②:http://www.blogjava.net/ ...

  7. HDOJ 4964 Emmet

    递归语法翻译... Emmet Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  8. Android的内存优化

    腾讯公司在五月三十一日开展[腾讯Bugly移动开发人员沙龙]大会.大会上面叶方正老师解说了 关于Android的内存优化的问题,只是我感觉叶老师许多其它的站在了測试的角度上去解释了这一方面,叶老师给我 ...

  9. H3C TE BGP拓扑排错报告

                                                                                       BGP排错报告 故障一:PPP链路 ...

  10. hdu5046(重复覆盖+二分)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5046 题意:要在n个城市里建造不超过k个机场覆盖所有城市,问机场城市之间最大距离最小为多少. 分析:二 ...