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,布布扣,bubuko.com

时间: 2024-11-09 12:54:11

cocos2dX 之CCAnimation/CCAnimate的相关文章

cocos2dx 运动+旋转动画 CCSequence CCAnimation CCAnimate CCMoveTo CCCallFuncN

cocos2dx 动画是个很神奇的东西~~, 这里看到的是一个物体,在运动的过程中会不断地翻转的过程.    两个动画一起来~~ 下面的代码中涉及到:CCAnimation(补间动画 )  CCAnimate(动画)  CCDelayTime(延迟动作)  CCFadeTo(设置透明态度) CCSequence(动作序列)  CCSpawn(让精灵的若干个动画同时执行)  CCRepeateForever(无限循环)  CCCallFuncN(瞬时动作中  node回调函数)  CCMoveTo

cocos2dx基础篇(24)——基本动画CCAnimation/CCAnimate

[唠叨] 基本动画制作需要用到CCAnimation类,用于存储动画相关的信息.以及由CCActionInterval继承的CCAnimate动画动作. 还有一些在创建动画动作的过程中,可能会用到的一些类CCSpriteFrame.CCSpriteFrameCache.CCAnimationFrame.CCAnimationCache. 本节的内容可能比较复杂,需要掌握的东西比较多,大家慢慢理解吧... [致谢] http://zengrong.net/post/2006.htm http://

【cocos2dx之CCAnimation、CCAnimate、CCAnimationCache使用】

一个精灵的动画该怎么理解? 我的理解就是场景中原本死气沉沉的精灵在原地动起来了. CCAnimation和CCAnimate的官方源代码解释是下面这段话[版本cocos2dx-2.2.2] /** A CCAnimation object is used to perform animations on the CCSprite objects. The CCAnimation object contains CCAnimationFrame objects, and a possible de

Cocos2d-X使用CCAnimation创建动画

动画在游戏中是很常见的 程序1:创建一个简单的动画 首先须要在project文件夹下的Resource文件夹中放一张有各种不同动作的图片 在程序中加入以下的代码 #include "Animation.h" CCScene* Animation::scene() { CCScene* s = CCScene::create(); Animation* layer = Animation::create(); s->addChild(layer); return s; } bool

cocos2dx[2.x]学习笔记

说明: 基于cocos2dx2.2.3,使用C++语言,在Visual Studio 2010进行开发的. 致谢: 在这里特别要感谢网络上给予我帮助的大牛,是他们的博客提供了很多cocos2dx的学习资料,才促使我的成长.以下的相关知识点,大多也是借鉴了他们的博客. 另外强烈建议大家去学习官方给出的TestCpp项目,里面涵盖了使用cocos2dx的精华知识部分. [cocos2dx 2.x] cocos2dx基础篇(1) --Cocos2D-X 和 VS2010 环境配置 cocos2dx基础

cocos2dx中创建动画的三种方法

1.最最原始的方法,先创建动画帧,再创建动画打包(animation),再创建动画(animate) 第一步: 创建动画帧:CCSpriteFrame,依赖于原始的资源图片(xx.png,xx.jpg) CCSpriteFrame *frame1=CCSpriteFrame::create("1.png"); CCSpriteFrame *frame2=CCSpriteFrame::create("2.png"); CCSpriteFrame *frame3=CCS

使用CCAnimate、CCAnimation、CCTextureCache、CCTexture2D来实现动画效果

使用CCTexture2D来创建动画效果,前提资源是有一张合成的大图 下面看具体的做法: CCSprite* heroSprite = CCSprite::create(); heroSprite -> setAnchorPoint(ccp(0.35,0.3)); heroSprite -> setPosition(ccp(heroSprite -> getContentSize().width/2, m_winSize.height/2)); this -> addCHild(h

Cocos2d-x 3.x plist+png 做动画

***************************************转载请注明出处:http://blog.csdn.net/lttree****************************************** 前言: 这次的东西,其实是在做完2048后,我有个Flash想用. 就像,天天系列,开头会有 "提米" 的叫声+动画, 是不是感觉很带感. 之前,做第一个游戏的时候,有做一套78帧的Flash, 但是当时不会用,现在正好拿过来用了,嘿嘿~ 正文: 这次例子

Cocos2d-x 自定义按钮类控制精灵攻击----之游戏开发《赵云要格斗》

本篇要讲讲怎么自定义按钮类,并通过这个按钮类的对像来控制精灵的攻击.在看本篇之前最好先看看上一篇 Cocos2d-x虚拟摇杆控制精灵上下左右运动----之游戏开发<赵云要格斗>,要素材和项目代码的把邮箱留下吧,因为这个项目还没弄完,我一直在改. 精灵的攻击也是一个动画,只不过,这个动画只播放一次,相当于在界面上加一个按钮,然后你点一次按钮,精灵就播放一次动画. 一.自定义按钮类 按钮可以用COCOS2D-X自带的,想着方便一点,我就自己封装了一个按钮类ControlButton,在里面添加一个