Cocos2d-x3.2 Animate帧动画

//GameScene.h
 
#include "cocos2d.h"
 
class  GameScene :  public  cocos2d::Layer
{
public :
     static  cocos2d::Scene* createScene();
     
     virtual  bool  init();
     
     void  menuCallback(cocos2d::Ref* pSender);
     
     CREATE_FUNC(GameScene);
};

 

 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//GameScene.cpp
 
#include "GameScene.h"
 
USING_NS_CC;
 
cocos2d::Scene* GameScene::createScene()
{
     auto  scene = Scene::create();    //创建一个场景
     auto  layer = GameScene::create();    //创建一个图层
     scene->addChild(layer);
     return  scene;
}
 
//初始化当前的图层
bool  GameScene::init()
{
     if (!Layer::init())       //初始化父类
         return  false ;
     
     //获取屏幕大小
     Size visibleSize = Director::getInstance()->getVisibleSize();
     //auto size = Director::getInstance()->getWinSize();
 
     //帧动画的创建
     //方式一,通过多张图片来创建
     auto  sprite1 = Sprite::create( "grossini_dance_05.png" );
     sprite1->setPosition(Vec2(visibleSize.width*0.3, visibleSize.height/2));
     this ->addChild(sprite1);
     
     //创建帧动画序列,名词形式
     auto  animation = Animation::create();
     for  ( int  i=5; i<11; i++)
     {
         char  szName[100] = {0};
         sprintf (szName,  "grossini_dance_%02d.png" , i);
         animation->addSpriteFrameWithFile(szName);
     }
     //设置帧动画属性
     animation->setDelayPerUnit(2.0f / 6);       //每一帧停留的时间,2秒时间完成6幅图片显示,切记要写成2.0f形式!
     animation->setRestoreOriginalFrame( true );        //播放完后回到第一帧
     
     auto  animate = Animate::create(animation);
     sprite1->runAction(RepeatForever::create(animate));
     
     
     //方式二,通过一张集合的图片来创建
     //创建2D纹理
     auto  texture = Director::getInstance()->getTextureCache()->addImage( "dragon_animation.png" );
     //建立图片帧
     auto  frame0 = SpriteFrame::createWithTexture(texture, Rect(132*0, 132*0, 132, 132));
     auto  frame1 = SpriteFrame::createWithTexture(texture, Rect(132*1, 132*0, 132, 132));
     auto  frame2 = SpriteFrame::createWithTexture(texture, Rect(132*2, 132*0, 132, 132));
     auto  frame3 = SpriteFrame::createWithTexture(texture, Rect(132*3, 132*0, 132, 132));
     auto  frame4 = SpriteFrame::createWithTexture(texture, Rect(132*0, 132*1, 132, 132));
     auto  frame5 = SpriteFrame::createWithTexture(texture, Rect(132*1, 132*1, 132, 132));
     
     auto  sprite2 = Sprite::createWithSpriteFrame(frame0);
     sprite2->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
     this ->addChild(sprite2);
     
     //保存图片帧
     //Vector<cocos2d::AnimationFrame *> array;
     Vector<cocos2d::SpriteFrame *> array;
     array.pushBack(frame0);
     array.pushBack(frame1);
     array.pushBack(frame2);
     array.pushBack(frame3);
     array.pushBack(frame4);
     array.pushBack(frame5);
     
     auto  animation2 = Animation::createWithSpriteFrames(array, 0.2f);    //此处createWithSpriteFrames()函数确实每帧间隔时间参数,需自行加上去!!!
     sprite2->runAction(RepeatForever::create(Animate::create(animation2)));
     
     
     //方式三,通过.plist 文件来创建
     auto  cache = SpriteFrameCache::getInstance();
     cache->addSpriteFramesWithFile( "animate.plist" );
     
     auto  sprite3 = Sprite::createWithSpriteFrameName( "grossini_dance_05.png" );
     sprite3->setPosition(Vec2(visibleSize.width*0.7, visibleSize.height/2));
     this ->addChild(sprite3);
     
     Vector<cocos2d::SpriteFrame *> arr;
     char  str[100] = {0};
     for  ( int  i=1; i<15; i++)
     {
         sprintf (str,  "grossini_dance_%02d.png" , i);
         auto  frame_2 = cache->SpriteFrameCache::getInstance()->getSpriteFrameByName(str);    //3.2版本有改变
         arr.pushBack(frame_2);
     }
     
     auto  animation3 = Animation::createWithSpriteFrames(arr, 0.2f);      //此处也不要忘记加上时间间隔参数
     sprite3->runAction(RepeatForever::create(Animate::create(animation3)));
     
     return  true ;
}

你可能感兴趣的:(cocos2d-x)