cocos2dx帧动画

前端之家收集整理的这篇文章主要介绍了cocos2dx帧动画前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


cocos2dx中创建动画的三种方法

1.最最原始的方法,先创建动画帧,再创建动画打包(animation),再创建动画(animate)

第一步:

创建动画帧:CCSpriteFrame,依赖于原始的资源图片(xx.png,xx.jpg)

CCSpriteFrame *frame1=CCSpriteFrame::create("1.png");

CCSpriteFrame *frame2=CCSpriteFrame::create("2.png");

CCSpriteFrame *frame3=CCSprteFrame::create("3.png");

...

第二步:创建动画打包,CCAnimation,依赖于创建好的动画帧,CCSpriteFrame

CCAnimation *animation=CCAnimation::create();

animation->addSpriteFrame(frame1);

animation->addSpriteFrame(frame2);

animation->addSpriteFrame(frame3);

...

设置帧动画之间的播放间隔

animation->setDelayPerUnit(0.2);

设置帧动画循环播放的次数

animation->setLoops(5);//-1表示无限循环

第三步:创建真正的动画:animate,依赖于动画打包,CCAnimation

CCAnimate *animate=CCAnimate::create(animation);

执行动画:spr->runAction(animate);

//animation->addSpriteFrameWithFileName(CCString::createWithFormat("animation/p_2_0%d.png",i + 1)->getCString());//通过图片直接创建帧,这是对上面的一种简化,但是没法利用帧缓存,效率不高

第二种创建动画的方法:

使用帧动画缓存:CCSpriteFrameCache,主要是简化了从原始图片一帧一帧的加载到内存的步骤

第一步:创建图片帧缓存,依赖于打包好的xx.plist图片文件

CCSpriteFrameCache::sharedFrameCache()->addSpriteFramesWithFile("xx.plist");

第二步:将图片帧缓存中的图片帧通过循环加入到CCArray数组中(容器),需要先创建好容器

CCArray *array=CCArray::create();

for(int i=0;i<n;i++)

{

  CCString *str=CCString::createWithFormat("%d.png",i+1);

  CCSpriteFrame *frame=CCSpriteFrameCache::sharedFrameCache()->spriteFrameByName(str);//通过图片帧的名字从图片帧缓存中获得图片

  array->addObject(str);//将图片帧加入数组容器中

}

CCAnimation *animation=CCAnimation::createWithSpriteFrames(array);//通过图片帧数组来创建动画打包

animation->setDelayUnit(0.2);

animation->setLoops(-1);

CCAnimate *animate=CCAnimate::create(animation);

spr->runAction(animate);

第三种创建帧动画的方法:

不需要先加载到容器(CCArray)中存起来,直接加入帧动画打包中即可.

第一步:创建帧动画缓存CCSpriteFrameCache

CCSpriteFrameCache::sharedFrameCache()->addSpriteFramesWithFile(xx.plist);

CCAnimation *animation=CCAnimation::create();

for(int i=0;i<n;i++)

{

  CCString str=CCString::createWithFormat("%d",i++);

  animation->addSpriteFrame(CCSpriteCache::sharedFrameCache()->spriteFrameByName(str->getCstring()));

}

animation->setDelayUnit(0.2);

animation->setLoops(-1);

CCAnimate *animate=CCAnimate::create(animation);

spr->runAction(animate);

第三种方法是结合了第一种和第二种方法优点,省去了先获取图片帧放入容器中,再统一从CCArray中提取图片帧来创建动画打包的步骤.


lua

-- 帧动画
local resFile2 = "res/gameres/general/weiwei/txt_n_niuji.plist"
local spriteFrame = cc.SpriteFrameCache:getInstance( )
spriteFrame:addSpriteFrames(resFile2)

local spriteTest = cc.Sprite:createWithSpriteFrameName("txt_n_niuji0.png")
spriteTest:setAnchorPoint( 0.5,0.5 )
spriteTest:setPosition(cc.p( display.cx/4,display.cy/2 ) )
self._widgets.testPanelV:addChild( spriteTest )

local animation = cc.Animation:create()
for i=0,9 do
-- local frameName = string.format( "shuohua%02d.png",i )
local blinkFrame = spriteFrame:getSpriteFrame( string.format( "txt_n_niuji%d.png",i ) )
animation:addSpriteFrame( blinkFrame )
end
animation:setDelayPerUnit( 0.1 )--设置每帧的播放间隔
animation:setRestoreOriginalFrame( true )--设置播放完成后是否回归最初状态
--animation:setLoops(-1)
local action = cc.Animate:create(animation)
--spriteTest:runAction(action)
spriteTest:runAction( cc.RepeatForever:create( action ) )

原文: https://www.cnblogs.com/ttss/p/4093687.html

猜你在找的Cocos2d-x相关文章