Cocos2d-x学习笔记(五岁以下儿童) 精灵两种方式播放动画
这几天在看控件类,临时没有想好实际运用的方向。单纯的创建网上已经有非常多这方面的样例,我就不写了。接下来是学习精灵类。精灵类若是单独学习也是非常easy。于是我加了一些有关动画方面的知识点与精灵类一起使用。让精灵播放简单的帧动画。
首先我们准备好动画素材,我在网上下了一个小游戏。将里面的素材做成了png和plist大图以供程序调用。我是用TexturePackerGUI来生成plist的。我选的是一个简单的待机动作,我们的目的就是让这张图动起来~
第一种方式:使用CCSpriteFrame
// 利用 CCTexture2D读取图片
CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage("hero/hero_standby.png"); // 生成序列帧。CCRectMake的4个參数(x,y,width,height)分别代表取该图片中坐标为x,y宽高为width,height的图
// 以下读出4个图暂存在frame中
CCSpriteFrame *frame0 = CCSpriteFrame::createWithTexture(texture, CCRectMake(0, 114 * 0, 66, 114));
CCSpriteFrame *frame1 = CCSpriteFrame::createWithTexture(texture, CCRectMake(66.25, 114 * 0, 66, 114));
CCSpriteFrame *frame2 = CCSpriteFrame::createWithTexture(texture, CCRectMake(66.25*2, 114 * 0, 66, 114));
CCSpriteFrame *frame3 = CCSpriteFrame::createWithTexture(texture, CCRectMake(66.25 * 3, 114 * 0, 66, 114)); //以下这行代码是设置默认图片和初始位置,由于COCOS2dx须要默认原始的图片
CCSprite* sprite = CCSprite::createWithSpriteFrame(frame0);
sprite->setPosition(ccp(size.width / 2, size.height / 2 +100));
addChild(sprite); //将5张读出来的图加到一个动画序列
CCArray *animFrames = new CCArray(4);
animFrames->addObject(frame0);
animFrames->addObject(frame1);
animFrames->addObject(frame2);
animFrames->addObject(frame3); //将5个动画帧生成CCAnimation对象 0.2f代表每一个之间的间隔时间
CCAnimation *animation = CCAnimation::createWithSpriteFrames(animFrames, 0.2f); //最后依据动画模板创建动画
CCAnimate *animate = CCAnimate::create(animation); //给精灵设置之前创建好的动作
sprite->runAction(CCRepeatForever::create(animate));
另外一种方式:使用CCSpriteFrameCache类读取plist
//将你须要的图片做成plist,然后用CCSpriteFrameCache读取出来
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile("hero/hero_standby.plist", "hero/hero_standby.png"); //创建精灵并将读取出来的第一张图片作为默认图片
CCSprite* sprite1 = CCSprite::createWithSpriteFrame(cache->spriteFrameByName("20005_1.png"));
sprite1->setPosition(ccp(size.width / 2, size.height / 2 - 100));
addChild(sprite1); //相同设置动画序列。这下面的步骤与第一种方式相同了
CCArray *animFrames1 = new CCArray(4);
animFrames1->addObject(cache->spriteFrameByName("20005_1.png"));
animFrames1->addObject(cache->spriteFrameByName("20005_3.png"));
animFrames1->addObject(cache->spriteFrameByName("20005_5.png"));
animFrames1->addObject(cache->spriteFrameByName("20005_7.png")); CCAnimation *animation1 = CCAnimation::createWithSpriteFrames(animFrames1, 0.2f);
CCAnimate *animate1 = CCAnimate::create(animation1);
sprite1->runAction(CCRepeatForever::create(animate1));
认真写过这两种方式而且理解之后就能发现,第一种方式有些蛋疼,须要自己找图片位置,我也不知道是不是还有其它更加便捷的方式,只是非常明显另外一种方式更加科学。不知道还有没其它更好的方法呢?知道的同学能够交流一下哦~
可能有人不知道plist是什么。详细我就不解释了。自己去查查,我仅仅说我们这里能用到的信息,里面记录了图片的名称和在大图中的位置,所以直接读取plist是很方便的。
做完这个样例还是有些小激动的。由于最终有点认为自己在做游戏了,嘿嘿。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
Cocos2d-x学习笔记(五岁以下儿童) 精灵两种方式播放动画的更多相关文章
- react学习笔记1之声明组件的两种方式
//定义组件有两种方式,函数和类 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } class ...
- angular学习笔记(三)-视图绑定数据的两种方式
绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...
- Android自动化学习笔记:编写MonkeyRunner脚本的几种方式
---------------------------------------------------------------------------------------------------- ...
- Android(java)学习笔记191:Android数据存储5种方式总结
1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...
- MySQL学习笔记(2) - 修改MySQL提示符的两种方法
学习于慕课网 http://www.imooc.com/video/1806 1.方法一: cmd中处于未登录状态时,输入 mysql -uroot -p自己的密码 --prompt 新的提示符 示例 ...
- Android(java)学习笔记134:Android数据存储5种方式总结
1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...
- 十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象
一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象 ...
- Android(java)学习笔记147:textView 添加超链接(两种实现方式,,区别于WebView)
1.方式1: LinearLayout layout = new LinearLayout(this); LinearLayout.LayoutParams params = new LinearLa ...
- C# Emgu CV学习笔记二之图像读写的两种方法
http://blog.csdn.net/marvinhong/article/details/6800450 图像显示在控件loadPictureBox上 方法一 //读取图像001.jpg Int ...
随机推荐
- HDU 1007 近期点对
分治法求近期点对 递归将点不断分成小组.计算最短距离.此时的最短距离不过两点都属两块的某一块(这里的切割点是mid点). 还须要考虑两点分属两块的情况. 这时对于选点则把范围缩小到了以mid为中心. ...
- tracert路由跟踪命令分析判断
可能有的会使用路由跟踪命令 ,可是却看不太明确显示出来的结果.结合我的来说明一下. (1)tracert命令介绍 tracert是路由跟踪命令,通过该命令的返回结果,能够获得本地到达目标主机所经过的网 ...
- QLineEdit 自动完成(使用setCompleter,内含一个ListView)
-------------------------------------CompleteLineEdit.h------------------------------------- #ifndef ...
- js技术要点---JS 获取网页源代码
JS 获取网页源代码 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html& ...
- vim经常使用命令总结
vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是非常主要的东西,也常常被用到,总结例如以下: v 从光标当前位置開始,光标所经过的地方会被选中,再按一下v结束. V ...
- HDU 5107 线段树扫描线
给出N个点(x,y).每一个点有一个高度h 给出M次询问.问在(x,y)范围内第k小的高度是多少,没有输出-1 (k<=10) 线段树扫描线 首先离散化Y坐标,以Y坐标建立线段树 对全部的点和询 ...
- CV和Resume的区别(转)
常常有人把CV和Resume混起来称为“简历”,其实精确而言,CV应该是“履历”,Resume才是简历.Resume概述了有关的教育准备和经历,是对经验技能的摘要:curriculum vitae则集 ...
- hdu1114(完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 分析:很裸的一道完全背包题,只是这里求装满背包后使得价值最少,只需初始化数组dp为inf:dp[ ...
- 从尾到头打印链表--《剑指offer》
题目:非常easy,就是题目,将链表从尾到头打印出来. 可能我们首先想到的是将链表进行遍历,将之前的訪问的数据进行保存,最后进行反向输出,但是保存数据的空间是个问题:或者是我们将整个链表进行反向操作, ...
- Kubernetes初步
Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上.为容器化的应用提供资源调度.部署执行.服务发现.扩容缩容等整一套功能.本质上可看作是基于容器技术的mini-Pa ...