cocos2d-x与CocosBuilder笔记:动画之手动激活
来源:互联网 发布:航天软件评测中心 编辑:程序博客网 时间:2024/06/04 08:09
读本文之前,请先熟悉cocos2d-x与CocosBuilder笔记:HelloCocosBuilder。
本文探讨一个简单的动画使用情形的实现:在适当的时候加载一个结点,然后让此结点做一定的动作。实现如下所示的效果:
为了简便,本文加载一个字标"I'm an animation",加载后,点击窗口中任意位置后(在ccTouchesBegan中)开始让它做尺寸(Scale)和透明度(Opacity)两个维度的变化,持续时间为2秒。
分析
本例子涉及到下面几个问题:
这个字标用什么表示?
Cocos2d-x中,字标的描述是CCLabelTTF;恰好CocosBuilder中提供了这种类型的支持,并且可以对字标的内容进行编辑。
在CocosBuilder中,这个字标放在什么地方?
CocosBuilder的中的元素描述是用树描述的,它有且仅有一个根点。新建一个CocosBuilder工程时,它默认建立了一个层,即根结点类型为CCLayer。CocosBuilder还有没有提供其它类型的结点可以作为根结点?答案是除了CCLayer之外,还有另外3个种类型的根结点,即CCNode, CCParticleSystemQuad和CCSprite。由此可见,CCLabel自己本身并不能作为一个根结点。经分析,可以选择CClayer、CCSprite或CCNode作为其根结点。本例中选用CCNode。
怎样定义任意时长的动画,并且由用户来激发?
CocosBuilder自己的例子中,那些动画都是在加载后就立即播放的,怎样让它不自动播放呢?另外,CocosBuilder中默认的动画时间都是10秒,怎样自定义时长?要回答这两个问题,需要理解时间线(TimeLine)的概念。CocosBuilder中,动画是由时间线来管理的。每条时间线有一个独特的名字(如“MyTimeLine”)。一条时间线描述了一段时间(因此可以自定义时间)。一个工程中可以有多个时间线,一个元素可以有多条时间线。时间线可以级连(Chained)。时间线还有一个AutoPlay的属性,选中则加载后就播放;不选中则需要在程序中显示调用CCBAnimationManager::runAnimations("MyTimeLine")来激发(假设时间线为MyTimeLine)。调用此方法后,此时间线下的所有元素的动作都会被激发。时间线级连可以实现CCSequence和CCRepeatForever的功能。
在代码中需要做什么?
对于CCLabelTTF,需不需要自己来重新定义一个类以及生产类?答案是不需要,cocos2d-x本身已经预定义了一系列的类以及加载器,如下:
"CCLayerColor", CCLayerColorLoader::loader()"CCLayerGradient", CCLayerGradientLoader::loader()"CCSprite", CCSpriteLoader::loader()"CCLabelBMFont", CCLabelBMFontLoader::loader()"CCNode", CCNodeLoader::loader()"CCLayer", CCLayerLoader::loader()"CCLabelTTF", CCLabelTTFLoader::loader()"CCScale9Sprite", CCScale9SpriteLoader::loader()"CCScrollView", CCScrollViewLoader::loader()"CCBFile", CCBFileLoader::loader()"CCMenu", CCMenuLoader::loader()"CCMenuItemImage", CCMenuItemImageLoader::loader()"CCControlButton", CCControlButtonLoader::loader()"CCParticleSystemQuad", CCParticleSystemQuadLoader::loader()
这些内容在CCNodeLoaderLibrary::registerDefaultCCNodeLoaders()中,在CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary()中自动调用,因此当我们调用此函数时,CCNodeLoaderLibrary自动具有解析上述类型的能力。
利用CCBReader加载后,在用户点击的时候,要调用CCBAnimationManager::runAnimations("MyTimeLine")为激发动作。
具体实现
用CocosBuilder来进行动画编辑
新建根结点
当CocosBuilder中有一个工程时(如没有,需要新建一个工程),点击File/New/New File,弹出如下对话框,
然后从Root object type下拉列表中选择CCNode,并且将Full Screen选项去掉。如下图所示
点击Create,取名(假设为MyAnimation),存储在工程目录下。
添加并编辑结点元素
在主界面上,点击CCLabelTTF元素创建按钮,然后像“cocos2d-x与CocosBuilder笔记:HelloCocosBuilder”中一样添加动画。
编辑时间线
点击Animation/Edit TimeLines,弹出对话框
此界面可以增加、删除时间线(通过左下角的+、-按钮来实现),改变时间线名字(双击名字即可以编辑),设置是否自动播放(遗憾的是不能改变持续时间Duration)。时间设置在程序主界面上的动画编辑区右上角,如下图所示。图中右上角有00:02:00,双击即会弹出对话框设置时间,此处设置为2秒。
名字,持续时间和播放方式设置好后如下图所示(下图是设置好后再重新点击Animation/Edit TimeLines得到的):
然后存储并且发布,将MyAnimation.ccbi拷贝到cocos2d-x工程下。
Cocos2d-x中代码实现
设表示场景的类为HelloWorld,需要如下操作
1 在头文件中添加CCBReader* m_pReader作为HelloWorld的成员变量
2 在HelloWorld::init中,加入
CCNodeLoaderLibrary* pLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary(); m_pReader = new CCBReader(pLoaderLibrary); CCNode* pLabel = m_pReader->readNodeGraphFromFile("MyAnimation.ccbi", this); pLabel->setPosition(ccpMult(ccp(getContentSize().width, getContentSize().height), 0.3f)); addChild(pLabel);
3 重载ccTouchesBegan函数,在其中调用m_pReader->getAnimationManager()->runAnimations("MyTimeLine");
4 在析构函数中调用CC_SAFE_RELEASE_NULL(m_pReader);
因为m_pReader是new出来的,因此需要显示将其释放(Release)。注意内存的管理。
注:cocos2d-x版本为cocos2d-2.0-x-2.0.3,CocosBuilder版本为2.1
- cocos2d-x与CocosBuilder笔记:动画之手动激活
- cocos2d-x与CocosBuilder笔记:HelloCocosBuilder
- cocos2d-x与CocosBuilder笔记:HelloCocosBuilder
- cocos2d-x与CocosBuilder
- cocos2d-x+cocosbuilder 学习笔记 (一)
- cocos2d-x+cocosbuilder 学习笔记 (二)
- cocos2d-x+cocosbuilder 学习笔记 (三)
- cocos2d-x+cocosbuilder 学习笔记 (四)
- cocos2d-x+cocosbuilder 学习笔记 (五)
- cocos2d-x+cocosbuilder 学习笔记 (六)
- Cocos2d-x基础:CocosBuilder的学习笔记
- cocos2d-x初探学习笔记-cocosBuilder
- cocos2d-x cocosBuilder
- cocos2d-x cocosBuilder
- cocos2d-x初探学习笔记(29)-cocosBuilder
- cocos2d-x初探学习笔记(29)-cocosBuilder
- Cocos2d-X 学习笔记 14 CocosBuilder基础应用
- cocos2d-x初探学习笔记(29)-cocosBuilder
- ural DP 1225
- RedHat yum 安装桌面
- 装甲逆袭-人物属性界面
- 私有成员访问的方法
- 经典领悟(不光是笑笑而已)(转)
- cocos2d-x与CocosBuilder笔记:动画之手动激活
- mysql 基础知识
- 装甲逆袭-装备店界面
- 【OpenGL】用OpenGL shader实现将YUV转RGB-(直接调用GPU实现,纯硬件方式,效率高)
- mysql
- 使用前端框架Foundation 4来帮助简化响应式设计开发
- Java2 核心技术第七版、第八版、第九版源代码下载地址
- Flash builder 4内存优化之java heap space解决办法
- maven常见问题问答