cocos2dX 之CCAnimation/CCAnimate
我们今天来学习cocos2dX里面的动画的制作, 有人说, 不是前面CCAction已经学过了吗? 怎么还要学, CCAction是动作, 而我们今天要学的是动画哦, 是让一个东西动起来哦, 好了进入今天的正题CCAnimation/CCAnimate, 我们知道, 动画看起来是在动的不是由于动画本身在动, 而是由于我们高速切换图片, 由于我们的视觉有一个残留的效果,
所以看起来就像是在动一样,
先准备一堆素材, 开个玩笑啦, 实际开发过程中, 没有人会弄一大堆素材放在那里, 我们今天准备了两种素材, 先来看看吧
一种是密密麻麻的带有配置文件的, 一种是每一帧都是同样大小的序列帧, 在这里我们推荐大家使用第一种, 由于第一种最大限度的使用了空间, 能在一张同样大小的图片上显示很多其它的资源, 加载游戏的时候能够节省内存(毕竟手机的内存还没达到电脑的水准), 另一个原因是操作起来比較方便, 加到缓存里面后直接用名字就能取出来, 而不像第二个还要计算位置, 我们这里打包工具使用的是 "红孩儿工具箱" , 当然, 大家也能够使用 "texturepacker", 详细的就不细说了, 赶快进入正题:
我们先来看看使用方法:
CCAnimation::create();
CCAnimation::createWithSpriteFrames( 帧数组, 每帧之间的间隔);//储存帧信息
CCAnimate::create( CCAnimation对象); //依据CCAnimation不断地切换精灵帧, 形成动画效果
setDelayPerUnit(); //设置帧间隔时间
setRestoreOriginalFrame( bool); //动画播放完之后会不会回到第一帧
setLoops(); //循环次数(-1为无限循环)
setFrames( 帧数组); //设置动画帧数组
在写代码之前我们先来看看这个配置文件:
我们能够看到, 我们每张小图都有一个相应的信息, 不用我们自己去取位置
好了, 写代码:
//使用第一张图片创建一个精灵
CCSprite* fish = CCSprite::createWithSpriteFrameName( "fish01_01.png");
fish->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2));
addChild( fish);
//创建帧数组
char buff[20] = {0};
CCArray* arr = CCArray::create();
for ( int i = 1; i < 11; ++i)
{
if ( i < 10)
{
sprintf( buff, "fish01_0%d.png", i);
}
else
{
sprintf( buff, "fish01_%d.png", i);
}
CCSpriteFrame* fishFrame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName( buff); //依据名字获得图片
arr->addObject( fishFrame); //将CCSpriteFrame加入到数组里面
}
//创建CCAnimation对象
CCAnimation* animation = CCAnimation::createWithSpriteFrames( arr, 0.2f); //设置0.2秒切换一帧图像
animation->setLoops( -1); //动画无限循环播放
//利用CCAnimation创建CCAnimate
CCAnimate* animate = CCAnimate::create( animation);
fish->runAction( animate);
我们来看看效果, 小鱼是不是游动了啊, 我们还能够加入CCAction动作, 配合起来就更逼真了, 我这里就不细说了
我们来接着看每张小图都一样大小的, 没有配置文件我们怎么操作:
// 第一步利用 CCTexture2D读取图片
CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage( "heroHurt.png");
//取出前面三个
CCSpriteFrame* frame0 = CCSpriteFrame::createWithTexture( texture, CCRectMake(400*0, 240*0, 400, 240));
CCSpriteFrame* frame1 = CCSpriteFrame::createWithTexture( texture, CCRectMake(400*1, 240*0, 800, 240));
CCSpriteFrame* frame2 = CCSpriteFrame::createWithTexture( texture, CCRectMake(400*2, 240*0, 1200, 240));
//用第一个创建一个精灵
CCSprite* sprite = CCSprite::createWithSpriteFrame(frame0);
sprite->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2));
addChild( sprite);
CCArray* arr2 = CCArray::create();
arr2->addObject( frame0);
arr2->addObject( frame1);
arr2->addObject( frame2);
CCAnimation* animation2 = CCAnimation::createWithSpriteFrames( arr2, 0.2f); //设置0.2秒切换一帧图像
animation2->setLoops( -1); //动画无限循环播放
CCAnimate* animate2 = CCAnimate::create( animation2);
sprite->runAction( animate2);
记得曾经用的是:
CCSpriteFrame* frame0 = CCSpriteFrame::frameWithTexture( texture, CCRectMake( 400*0, 240*0, 400, 240));
CCSprite* sprite = CCSprite::spriteWithSpriteFrame( frame0);
我用的2.1.5的居然不能使用, 查了好久官方API才找到
CCSpriteFrame* frame0 = CCSpriteFrame::createWithTexture( texture, CCRectMake(400*0, 240*0, 400, 240));
CCSprite* sprite = CCSprite::createWithSpriteFrame(frame0);
好了 看效果:
额, 这个, 我没有把图片的位置计算对, 所以
今天还是就到此为止吧
cocos2dX 之CCAnimation/CCAnimate的更多相关文章
- cocos2dx基础篇(22) 基本动画CCAnimation/CCAnimate
[小知识] CCSpriteFrame :精灵帧. 它是相对动画而产生的,其实就是一张纹理图片. CCAnimationFrame :动画帧. 由精灵帧与间隔帧数组成,是动画CC ...
- cocos2dx 运动+旋转动画 CCSequence CCAnimation CCAnimate CCMoveTo CCCallFuncN
cocos2dx 动画是个非常奇妙的东西~~. 这里看到的是一个物体,在运动的过程中会不断地翻转的过程. 两个动画一起来~~ 以下的代码中涉及到:CCAnimation(补间动画 ) CCAnima ...
- 动作-CCActionInterval之CCAnimation&CCAnimate
动画简单实例 v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#def ...
- Cocos2d-X使用CCAnimation创建动画
动画在游戏中是很常见的 程序1:创建一个简单的动画 首先须要在project文件夹下的Resource文件夹中放一张有各种不同动作的图片 在程序中加入以下的代码 #include "Anim ...
- Cocos2d-x 创建(create)动画对象CCAnimation报错分析
本人在使用精灵表单创建动画的过程中突然遇到了一些个问题,下面进行一下分析总结. 根据在Cocos2d-iphone中的经验,我写出了如下的代码: CCSpriteFrameCache::sharedS ...
- cocos2dx中创建动画的三种方法
1.最最原始的方法,先创建动画帧,再创建动画打包(animation),再创建动画(animate) 第一步: 创建动画帧:CCSpriteFrame,依赖于原始的资源图片(xx.png,xx.jpg ...
- 【Cocos2d-X开发学习笔记】第21期:动画类(CCAnimate)的使用
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 之前我们已经学习过一些方法让节点“动”起来,Co ...
- cocos2d-x 2.0通过CCAnimation实例获取CCSpriteFrame
通过CCAnimation实例获取CCSpriteFrame,会出现类型转换问题.我们在创建一个animation的时候,经常遵循下面的步骤:1)create 一个CCArray对象A.2)通过A-& ...
- cocos2dx 实现flappybird
前两天在博客园看到网友实现的一个网页版的flappy bird,挂在360游戏平台,玩了一会儿得分超低,就很想自己做一个.刚好这两天炫舞的活都清了,就弄一下玩玩. 效果图 布局类GameScene.h ...
随机推荐
- Mysql--数据表碎片优化方法
碎片产生原因: 大量批量插入和删除操作数据库,基于线性表的顺序存储结构的特点,出现了大量的空间碎片.一.优化步骤: 1.查看整库的情况 2.方便优化 3.整库所有表, 包含行数 索引长度 碎片空间 二 ...
- php缓存技术有哪些(总结)
php缓存技术有哪些(总结) 一.总结 一句话总结: 静态页面:全页面静态化缓存,页面部分缓存(将页面中不常变动的部分进行静态化缓存), 数据缓存:比如我的每轮的题目数据,商店,寻宝数据等 数据库:查 ...
- css3新特性概览
一.特性 1.强大的选择器 2.半透明度效果的实现 3.多栏布局 4.多背景图 css3允许背景属性设置多个属性值,如:background-image,background-repeat,backg ...
- css 一行或多行文字溢出以...的形式隐藏
一行文字溢出以...形式隐藏 我需要隐藏... css代码如下: white-space:nowrap; text-overflow:ellipsis; overflow:hidden; 多行文字溢出 ...
- hibernate 注释多表 级联操作
一对多模型(单向) 说明: 一个客户对应多个地址,通过客户可以获得该客户的多个地址的信息.客户和地址是一对多的关系,并且客户与地址是单向关联的关系. 映射策略 # 外键关联:两个表的关系定义在一个表中 ...
- os.path.join 的用法
Python中有join和os.path.join()两个函数,具体作用如下: join:连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串os.path.joi ...
- Codeforces 142B(二分染色、搜索)
要点 会发现本质上棋盘分成了若干个独立集,本集合内的点放不放棋子并不影响其他集合内的 集合的划分方式就是满棋盘跳马步直到全跳过了,然后每个集合就分成两队,我们选人多的那队放棋子,人少那队当禁区 con ...
- 跟我一起做一个vue的小项目(四)
接下来我们进行的是轮播页面下面的导航页的开发 我们需要的是实现轮播页下面的图标,并且实现轮播效果 这个话,其实基本思路先是渲染出小图标,然后,我们要对页数进行判断,如果图标的个数展示的就是8个,那个这 ...
- Javascript-new Date() 与 Date() 的区别
var today1 = Date() //返回一个字符串(string),没有getDate等日期对象方法,内容为当前时间 var today2 = new Date() //返回一日期对象,内容为 ...
- node.js install and cecium apply
ubuntu 18.04 install node.js https://blog.csdn.net/m0_43404744/article/details/94364508