文档章节

【Cocos2d-x-基础概念】Animations

王选易
 王选易
发布于 2013/05/21 15:45
字数 631
阅读 1.6K
收藏 2

3 月,跳不动了?>>>

#Cocos2d-x-基本概念-Animations

###帧动画

你可以通过一系列的图片来创建一个童话,如下

CCAnimation *animation = CCAnimation:create();

//load image file from local system to CCSpriteFrame, then add into CCAnimation

for (int i = 0; i < 15; ++i)
{
	char szImageFileName[128] = {0};
	sprintf(szImageFileName, "Images/grossini_dance_%02d.png", i);
	animation->addSpriteFrameWithFilename(szImageFileName);
}

animation->setDelayPerUnit(2.8f / 14.0f);// This animation contains 14 frames, will continuous 2.8 seconds.
animation->setRestoreOriginalFrame(true);// Return to the 1st frame after the 14th frame is played.

CCAnimate *action = CCAnimate::create(animation);
sprite->runAction(action);

注意CCAnimation是由SpriteFrame的数组、每帧之间的间隔时间,真个动画的长度等组成的,它是一组数据,相比之下,CCAnimate是一个Action,它是根据CCAnimation构建的

###SpriteSheet动画

上一种方法实际上不常在2d游戏中用到,我们在2d游戏中经常用到一种叫spritesheet的方法载入图像

下图就是典型的spritesheet,它由一个动画的不同帧组成,或者他可以保存在游戏中一个场景所需要的所有场景

01

在opengles1.1中,spritesheet有以下几个好处:

  • 减少文件IO时间
  • 减少内存分配带来的问题,因为spritesheet的长宽必须是2的整数次幂,如:256,512,1024,etc
  • 减少opengl的渲染次数

###从png和plist中创建动画

自从运用了opengl2.0后,CCSpriteSheet逐渐被CCSpriteBatchNode取代

CCSpriteBatchNode实际上包含了所有SpriteFrame所需要的图片素材。你必须把它add到一个scene上,即使它本身什么也不会画,它只是由于它是opengl的渲染管线的一部分才添加到scene上的

CCSpriteBatchNode* spritebatch = CCSpriteBatchNode::create("animations/grossini.png");

然后,你需要用CCSpriteFrameCache的单件来得到plist文件,plist中记载了spritesheet中每一帧的大小和名字等信息

CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile("animations/grossini.plist");

一旦你的png和plist文件都载入好了,你就可以使用createWithSpriteFrameName方法来创建Sprite了,

m_pSprite1 = CCSprite::createWithSpriteFrameName("grossini_dance_01.png");
spritebatch->child(m_pSprite1)
addChild(spritebatch)

createWithSpriteFrameName从plist中找到对应桢并对png进行剪切,获取相应的图片

现在我们通过CCArray来创建一个动画跑在精灵m_pSprite上

CCArray* animFrames = CCArray::createWithCapacity(15);

char str[100] = {0};

for(int i = 1; i < 15; i++)
{
    sprintf(str, "grossini_dance_%02d.png", i);
    CCSpriteFrame* frame = cache->spriteFrameByName( str );
    animFrames->addObject(frame);
}

###File Animation

CCAnimationCache能够加载一个描述一个batchnode的xml或者plist,接口如下

CCAnimationCache *cache = CCAnimationCache::sharedAnimationCache(); // "caches" are always singletons in cocos2d
cache->addAnimationsWithFile("animations/animations-2.plist");
CCAnimation animation = cache->animationByName("dance_1");  // I apologize for this method name, it should be getAnimationByName(..) in future versions
CCAnimate animate = CCAnimate::create(animation);  // Don't confused between CCAnimation and CCAnimate :)
sprite->runAction(animate);

© 著作权归作者所有

王选易

王选易

粉丝 99
博文 20
码字总数 20066
作品 3
南京
程序员
私信 提问
加载中

评论(0)

cocos2d-x::Animations

本博客已迁移至 [www.0x520.com][1] [1]:http://www.0x520.com Animations Frame Animation You can create an animation from a series of image file, like this: Note that CCAnimation i......

小小霸王枪
2013/12/24
300
0
小为/pixi-action

pixi-action pixi-action is a plugin for Pixi.js to create actions and animations easily. API inspired by Cocos2d-x. Online demo here. 1. Install npm install pixi-action it, or i......

小为
2016/12/22
0
0
【Cocos2d-x-基础概念】坐标系统

Cocos2d-x-基础概念-坐标系统 不同坐标系的介绍 笛卡尔坐标系 UI坐标系 在ios、安卓、wp一般的UI坐标布局中 原点是在左上角 x从左到右递增 y从顶到底递增 像这样 Direct3d DirectX中采取了笛...

王选易
2013/05/21
3K
0
手游开发神器 cocos2d-x editor 教程聚合和代码下载(持续更新中)

一 cocos2d-x editor工具下载和基础教程: 一 手游开发神器 cocos2d-x editor初识 二 手游开发神器 cocos2d-x editor工具下载和安装配置 三 手游开发神器 cocos2d-x editor 之基础工具 inte...

makeapp628
2014/02/11
0
0
cocos2d-x支持c++、js、lua开发

作者:左文 链接:https://www.zhihu.com/question/21130385/answer/21789568 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 纯属个人观点 1 Unity3d支...

壹峰
2017/10/18
383
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么只能在头文件中实现模板? - Why can templates only be implemented in the header file?

问题: Quote from The C++ standard library: a tutorial and handbook : 引用来自C ++标准库:教程和手册 : The only portable way of using templates at the moment is to implement t......

javail
今天
19
0
Gradle 6 针对已有的构建如何创建一个构建扫描

有关构建扫描的定义为: 构建扫描(build scan)是一个中心化并且可以共享的构建记录。这个构建记录通常能够告诉在构建中发生了什么并且为什么会发生。 通过应用构建扫描插件到你的项目中,你...

honeymoose
今天
17
0
C语言动态内存分配:(一)malloc/free的实现及malloc实际分配/释放的内存

一、malloc/free概述 malloc是在C语言中用于在程序运行时在堆中进行动态内存分配的库函数。free是进行内存释放的库函数。 1、函数原型 #include <stdlib.h> void *malloc( size_t size ); v...

shzwork
今天
17
0
什么是JavaBean? - What is a JavaBean exactly?

问题: I understood, I think, that a "Bean" is a Java class with properties and getters/setters. 我认为,“ Bean”是具有属性和getter / setter的Java类。 As much as I understand,......

技术盛宴
今天
27
0
深圳援鄂最后一批工作人员归来,88万元关爱金发放至85人

中国公益在线3月31日深圳讯 深圳援鄂最后一批工作人员归来......深圳市民政局、深圳市卫健委和深圳市慈善会发起了“深爱战疫天使基金”项目,联合龙华区慈善会和 永贤慈善基金会,进行第二次...

传承天下融媒体中心
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部