Cocos2d-x3.2 Animate帧动画


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//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;

}

备注:注意spriteWithSpriteFrames()函数缺省时间间隔参数,需自行添加!同时,不要忘了把资源文件加载到Resources文件夹下

时间: 2024-08-04 07:44:21

Cocos2d-x3.2 Animate帧动画的相关文章

Cocos2d-x开发实例介绍帧动画使用

下面我们通过一个实例介绍一下帧动画的使用这个实例如下图所示点击Go按钮开始播放动画这时候播放按钮标题变为Stop点击Stop按钮可以停止播放动画. 下面我们再看看具体的程序代码首先看一下看HelloWorldScene.h文件它的代码如下 #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class HelloWorld : public cocos2d::Layer {

什么叫精灵帧动画

精灵帧动画是一种通常的动画精灵的方法,其通过从头至尾循环显示一系列的图片. 本质上,它和偶尔改变精灵的纹理效果相同. 术语sprite frame指的是一个cocos2D提供的额外类,CCSpriteFrame.它引用对应的纹理和额外的寻址该精灵的信息就像纹理中的一个区域. 通常来说,纹理实际上是一个精灵表纹理(Sprite Sheet texture),CCSpriteFrame类包含了在纹理内部哪里可以找到这个图片.

Cocos2d-x Lua中实例:帧动画使用

下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮标题变为Stop,点击Stop按钮可以停止播放动画. 帧动画实例 下面我们再看看具体的程序代码,首先看一下看GameScene.lua文件,它的代码如下: local isPlaying = false -- 播放标识 ① local size =cc.Director:getInstance():getWinSize() - - -- create layer function GameSce

Cocos2d-x Lua中帧动画

帧动画就是按一定时间间隔.一定的顺序.一帧一帧地显示帧图片.我们的美工要为精灵的运动绘制每一帧图片,因此帧动画会由很多帧组成,按照一定的顺序切换这些图片就可以了. 在Cocos2d-x Lua中播放帧动画涉及到两个类:Animation和Animate,类图如图所示,Animation是动画类,它保存有很多动画帧,Animate类是动作类它继承于ActionInterval类,属于间隔动作类,它的作用是将Animation定义的动画转换成为动作进行执行,这样我们就看到动画播放的效果了.    

Android 动画(View动画,帧动画,属性动画)详细介绍_Android

0. 前言  Android动画是面试的时候经常被问到的话题.我们都知道Android动画分为三类:View动画.帧动画和属性动画. 先对这三种动画做一个概述: View动画是一种渐进式动画,通过图像的平移.缩放.旋转和透明度等各种渐进式变换完成动画效果. 帧动画是通过不停的切换图片实现动画效果. 属性动画是不停的改变对象的属性来实现动画效果.本文原创,转载请注明出处: http://blog.csdn.net/seu_calvin/article/details/52724655 1.  Vi

Android 动画(View动画,帧动画,属性动画)详细介绍

0. 前言 Android动画是面试的时候经常被问到的话题.我们都知道Android动画分为三类:View动画.帧动画和属性动画. 先对这三种动画做一个概述: View动画是一种渐进式动画,通过图像的平移.缩放.旋转和透明度等各种渐进式变换完成动画效果. 帧动画是通过不停的切换图片实现动画效果. 属性动画是不停的改变对象的属性来实现动画效果.本文原创,转载请注明出处: http://blog.csdn.net/seu_calvin/article/details/52724655 1.  Vie

android帧动画,移动位置,缩放,改变透明度等动画讲解

1.苦逼的需求又来了,需要实现一些动画效果,第一个想到的是播放gif图片,但是这样会占包的资源,并且清晰度不高,于是想着程序实现,自己用帧动画+缩放+移动+透明度 实现了一些想要的效果,这里跟大家分享一下 2.效果图如下:      3.帧动画实现代码     1).首先获取每帧显示的ImageView控件,然后把所有帧放到AnimationDrawable对象里面去,开启动画,通过handle延时2秒关闭动画 ImageView ivFrame = (ImageView) findViewBy

Flash动画制作技巧之如何掌握逐帧动画

flash动画|技巧 问题:逐帧动画与移动渐变动画,形状渐变动画有什么区别? 解决思路 在本例中详细地解释了逐帧动画的特点和与其他形式动画的区别.逐帧动画,顾名思义就是把运动过程附加在每个帧中,当影格快速移动的时候,利用人的视觉的残留现象,形成流畅的动画效果. 具体步骤 1.运行Flash MX 2004,文档属性默认. 2.单击第1帧,利用椭圆形工具在舞台的左侧画一个红颜色无边框的圆. 3.单击第1帧,按快捷键"F6"键,连续在时间轴上插入10个关键帧.如图2.1.51所示. 图2.

Fireworks制作图片变换效果逐帧动画

细节性的动画在FW里还是使用逐帧动画调节起来比较细腻,虽然使用动画元件比较快,但是我还是比较喜欢一帧一帧的调,做了几个图片变换过渡的效果: ① 逐帧动画: PNG文件: ② 逐帧+蒙板: PNG文件: ③ 逐帧+不透明度做的图片过渡: PNG文件: ④ 逐帧+灰度蒙板做的图片过渡: PNG文件: