Cocos2d-x 系统动画
2013-06-13 13:43
429 查看
出处:/article/1389518.html
Cocos2d-x提供的动画主要是瞬时动画和延时动画。
瞬时动作就是不需要时间,马上就完成的动作。瞬时动作的共同基类是CCActionInstant。
延时动作就是指动作的完成需要一段时间。因此,几乎所有的延时动作都使用执行时间作为第一个参数,它们有着共同的基类CCActionInterval。
我实现x翻转和y翻转
原图
使用下面的代码实现x和y翻转
[cpp] view
plaincopy
CCSprite *s=CCSprite::create("iconccc.png");//创建精灵
s->setPosition(ccp(200,200));//设置位置
addChild(s);//添加
CCActionInstant *ix=CCFlipX::actionWithFlipX(1);//x翻转
CCActionInstant *iy=CCFlipY::actionWithFlipY(1);//y翻转
s->runAction(ix);//运行
s->runAction(iy);
[cpp] view
plaincopy
CCSprite *s=CCSprite::create("iconccc.png");//创建精灵
s->setPosition(ccp(200,200));//设置位置
addChild(s);//添加
CCActionInstant *ix=CCFlipX::actionWithFlipX(1);//x翻转
CCActionInstant *iy=CCFlipY::actionWithFlipY(1);//y翻转
s->runAction(ix);//运行
s->runAction(iy);
运行效果:
CCXxxxTo - 绝对动作,执行的结果与当前的状态关系不密切;
CCXxxxBy - 相对动作,在当前的状态上执行某种动作,执行的结果与当前状态是紧密相关的。
移动到 - CCMoveTo
移动 - CCMoveBy
跳跃到 - CCJumpTo
参数为终点位置、跳跃高度和跳跃次数。
跳跃 - CCJumpBy
贝赛尔曲线 - CCBezierBy
支持三次贝赛尔曲线:P0-起点,P1-起点切线方向,P2-终点切线方向,P3-终点。
首先设置贝塞尔参数,然后执行。
放大到 - CCScaleTo
放大 - CCScaleBy
如果参数为小数,那就是缩小了。
旋转到 - CCRotateTo
旋转 - CCRotateBy
闪烁 - CCBlink
色调变化到 - CCTintTo
色调变换 - CCTintBy
变暗到 - CCFadeTo
由无变亮 - CCFadeIn
由亮变无 - CCFadeOut
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
s->runAction(ac);
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
s->runAction(ac);
旋转270度。
还有一些组合动画
CCsequence
序列的使用非常简单,该类从CCActionInterval派生,本身就可以被CCNode对象执行。该类的作用就是线性排列若干个动作,然后按先后次序逐个执行。
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *bc=CCBlink::actionWithDuration(3,10);
CCActionInterval *mc=CCMoveTo::actionWithDuration(2,CCPoint(300,200));
CCActionInterval *jc=CCJumpTo::actionWithDuration(3,CCPoint(400,400),20,4);
CCFiniteTimeAction *se=CCSequence::actions(ac,bc,mc,jc,NULL);
s->runAction(se);
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *bc=CCBlink::actionWithDuration(3,10);
CCActionInterval *mc=CCMoveTo::actionWithDuration(2,CCPoint(300,200));
CCActionInterval *jc=CCJumpTo::actionWithDuration(3,CCPoint(400,400),20,4);
CCFiniteTimeAction *se=CCSequence::actions(ac,bc,mc,jc,NULL);
s->runAction(se);
上面的代码一次执行。
CCSpawn
要求动作本身是可以同时执行的,比如:移动式翻转、变色、缩放等。需要特别注意的是,同步执行最后完成的时间由基本动作中用时最大者决定。
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
s->runAction(se);
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
s->runAction(se);
上面的动画同时执行。
CCRepeat
CCRepeat用来将某一动作重复有限次数
[cpp] view
plaincopy
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCActionInterval *rc=CCRepeat::actionWithAction(se,4);
[cpp] view
plaincopy
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCActionInterval *rc=CCRepeat::actionWithAction(se,4);
上面的代码执行四次
Reverse
动作就是反向(逆向)执行某个动作,支持针对动作序列的反动作序列。反动作不是一个专门的类,而是CCFiniteTimeAction引入的一个接口。不是所有的类都支持反动作,CCXxxxTo类通常不支持反动作,而CCXxxxBy类通常支持,示例如下:
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCFiniteTimeAction *rrc=se->reverse();
CCFiniteTimeAction *lc=CCSequence::actions(se,rrc,NULL);
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCFiniteTimeAction *rrc=se->reverse();
CCFiniteTimeAction *lc=CCSequence::actions(se,rrc,NULL);
上面的动画将还原。
CCDelayTime
通过CCDelayTime,我们可以在动作序列中增加一个时间间歇。
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCFiniteTimeAction *rrc=se->reverse();
CCFiniteTimeAction *lc=CCSequence::actions(se,CCDelayTime::actionWithDuration(3),rrc,NULL);
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCFiniteTimeAction *rrc=se->reverse();
CCFiniteTimeAction *lc=CCSequence::actions(se,CCDelayTime::actionWithDuration(3),rrc,NULL);
CCCallFunc
在运行过程中还可以增加函数调用
函数无返回值,无参数
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCFiniteTimeAction *rrc=se->reverse();
CCFiniteTimeAction *func=CCCallFunc::actionWithTarget(this,callfunc_selector(HelloWorld::backFunc));
CCFiniteTimeAction *lc=CCSequence::actions(se,func,CCDelayTime::actionWithDuration(3),rrc,NULL);
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCFiniteTimeAction *rrc=se->reverse();
CCFiniteTimeAction *func=CCCallFunc::actionWithTarget(this,callfunc_selector(HelloWorld::backFunc));
CCFiniteTimeAction *lc=CCSequence::actions(se,func,CCDelayTime::actionWithDuration(3),rrc,NULL);
在se动画运行完了之后调用函数。
CCCallFuncN
函数无返回值,有一个CCNode*的指针
[cpp] view
plaincopy
CCSprite *s=CCSprite::create("sprite.png");
s->setPosition(ccp(0,0));
addChild(s);
CCActionInterval *move=CCMoveBy::create(3,ccp(450,290));
CCFiniteTimeAction *fn=CCCallFuncN::actionWithTarget(this,callfuncN_selector(HelloWorld::funcN));
CCFiniteTimeAction *a=CCSequence::actions(move,fn,NULL);
s->runAction(a);
[cpp] view
plaincopy
CCSprite *s=CCSprite::create("sprite.png");
s->setPosition(ccp(0,0));
addChild(s);
CCActionInterval *move=CCMoveBy::create(3,ccp(450,290));
CCFiniteTimeAction *fn=CCCallFuncN::actionWithTarget(this,callfuncN_selector(HelloWorld::funcN));
CCFiniteTimeAction *a=CCSequence::actions(move,fn,NULL);
s->runAction(a);
回调函数是
[cpp] view
plaincopy
void HelloWorld::funcN(CCNode
*pSender)
{
CCLog("funcN");
CCSprite *s=(CCSprite*)pSender;
CCLog("x=%f,y=%f",s->getPosition().x,s->getPosition().y);
}
[cpp] view
plaincopy
void HelloWorld::funcN(CCNode *pSender)
{
CCLog("funcN");
CCSprite *s=(CCSprite*)pSender;
CCLog("x=%f,y=%f",s->getPosition().x,s->getPosition().y);
}
通过测试,传递进来的pSender其实是运行该函数的精灵的指针。
CCCallFuncND
在调用这个函数的时候,可以传递一个void*的参数
如下使用:
[cpp] view
plaincopy
CCSprite *s=CCSprite::create("sprite.png");
s->setPosition(ccp(0,0));
addChild(s);
CCActionInterval *move=CCMoveBy::create(3,ccp(450,290));
CCFiniteTimeAction *fn=CCCallFuncND::actionWithTarget(this,callfuncND_selector(HelloWorld::funcN),(void*)7);
CCFiniteTimeAction *a=CCSequence::actions(move,fn,NULL);
s->runAction(a);
[cpp] view
plaincopy
CCSprite *s=CCSprite::create("sprite.png");
s->setPosition(ccp(0,0));
addChild(s);
CCActionInterval *move=CCMoveBy::create(3,ccp(450,290));
CCFiniteTimeAction *fn=CCCallFuncND::actionWithTarget(this,callfuncND_selector(HelloWorld::funcN),(void*)7);
CCFiniteTimeAction *a=CCSequence::actions(move,fn,NULL);
s->runAction(a);
回调函数是:
[cpp] view
plaincopy
void HelloWorld::funcN(CCNode
*pSender,void* data)
{
CCLog("funcN");
CCSprite *s=(CCSprite*)pSender;
CCLog("x=%f,y=%f,*data=%d",s->getPosition().x,s->getPosition().y,int(data));
}
[cpp] view
plaincopy
void HelloWorld::funcN(CCNode *pSender,void* data)
{
CCLog("funcN");
CCSprite *s=(CCSprite*)pSender;
CCLog("x=%f,y=%f,*data=%d",s->getPosition().x,s->getPosition().y,int(data));
}
这样可以获得传递过来的数据。
CCCallFuncO
这个函数与CCCallFuncN差不多,只不过回调函数的参数是CCObject*类型。
Cocos2d-x提供的动画主要是瞬时动画和延时动画。
瞬时动作就是不需要时间,马上就完成的动作。瞬时动作的共同基类是CCActionInstant。
延时动作就是指动作的完成需要一段时间。因此,几乎所有的延时动作都使用执行时间作为第一个参数,它们有着共同的基类CCActionInterval。
1.瞬时动画
我实现x翻转和y翻转原图
使用下面的代码实现x和y翻转
[cpp] view
plaincopy
CCSprite *s=CCSprite::create("iconccc.png");//创建精灵
s->setPosition(ccp(200,200));//设置位置
addChild(s);//添加
CCActionInstant *ix=CCFlipX::actionWithFlipX(1);//x翻转
CCActionInstant *iy=CCFlipY::actionWithFlipY(1);//y翻转
s->runAction(ix);//运行
s->runAction(iy);
[cpp] view
plaincopy
CCSprite *s=CCSprite::create("iconccc.png");//创建精灵
s->setPosition(ccp(200,200));//设置位置
addChild(s);//添加
CCActionInstant *ix=CCFlipX::actionWithFlipX(1);//x翻转
CCActionInstant *iy=CCFlipY::actionWithFlipY(1);//y翻转
s->runAction(ix);//运行
s->runAction(iy);
运行效果:
2.延时动画
这里有一个简单的类命名规则:CCXxxxTo - 绝对动作,执行的结果与当前的状态关系不密切;
CCXxxxBy - 相对动作,在当前的状态上执行某种动作,执行的结果与当前状态是紧密相关的。
移动到 - CCMoveTo
移动 - CCMoveBy
跳跃到 - CCJumpTo
参数为终点位置、跳跃高度和跳跃次数。
跳跃 - CCJumpBy
贝赛尔曲线 - CCBezierBy
支持三次贝赛尔曲线:P0-起点,P1-起点切线方向,P2-终点切线方向,P3-终点。
首先设置贝塞尔参数,然后执行。
放大到 - CCScaleTo
放大 - CCScaleBy
如果参数为小数,那就是缩小了。
旋转到 - CCRotateTo
旋转 - CCRotateBy
闪烁 - CCBlink
色调变化到 - CCTintTo
色调变换 - CCTintBy
变暗到 - CCFadeTo
由无变亮 - CCFadeIn
由亮变无 - CCFadeOut
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
s->runAction(ac);
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
s->runAction(ac);
旋转270度。
还有一些组合动画
CCsequence
序列的使用非常简单,该类从CCActionInterval派生,本身就可以被CCNode对象执行。该类的作用就是线性排列若干个动作,然后按先后次序逐个执行。
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *bc=CCBlink::actionWithDuration(3,10);
CCActionInterval *mc=CCMoveTo::actionWithDuration(2,CCPoint(300,200));
CCActionInterval *jc=CCJumpTo::actionWithDuration(3,CCPoint(400,400),20,4);
CCFiniteTimeAction *se=CCSequence::actions(ac,bc,mc,jc,NULL);
s->runAction(se);
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *bc=CCBlink::actionWithDuration(3,10);
CCActionInterval *mc=CCMoveTo::actionWithDuration(2,CCPoint(300,200));
CCActionInterval *jc=CCJumpTo::actionWithDuration(3,CCPoint(400,400),20,4);
CCFiniteTimeAction *se=CCSequence::actions(ac,bc,mc,jc,NULL);
s->runAction(se);
上面的代码一次执行。
CCSpawn
要求动作本身是可以同时执行的,比如:移动式翻转、变色、缩放等。需要特别注意的是,同步执行最后完成的时间由基本动作中用时最大者决定。
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
s->runAction(se);
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
s->runAction(se);
上面的动画同时执行。
CCRepeat
CCRepeat用来将某一动作重复有限次数
[cpp] view
plaincopy
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCActionInterval *rc=CCRepeat::actionWithAction(se,4);
[cpp] view
plaincopy
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCActionInterval *rc=CCRepeat::actionWithAction(se,4);
上面的代码执行四次
Reverse
动作就是反向(逆向)执行某个动作,支持针对动作序列的反动作序列。反动作不是一个专门的类,而是CCFiniteTimeAction引入的一个接口。不是所有的类都支持反动作,CCXxxxTo类通常不支持反动作,而CCXxxxBy类通常支持,示例如下:
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCFiniteTimeAction *rrc=se->reverse();
CCFiniteTimeAction *lc=CCSequence::actions(se,rrc,NULL);
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCFiniteTimeAction *rrc=se->reverse();
CCFiniteTimeAction *lc=CCSequence::actions(se,rrc,NULL);
上面的动画将还原。
CCDelayTime
通过CCDelayTime,我们可以在动作序列中增加一个时间间歇。
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCFiniteTimeAction *rrc=se->reverse();
CCFiniteTimeAction *lc=CCSequence::actions(se,CCDelayTime::actionWithDuration(3),rrc,NULL);
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCFiniteTimeAction *rrc=se->reverse();
CCFiniteTimeAction *lc=CCSequence::actions(se,CCDelayTime::actionWithDuration(3),rrc,NULL);
CCCallFunc
在运行过程中还可以增加函数调用
函数无返回值,无参数
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCFiniteTimeAction *rrc=se->reverse();
CCFiniteTimeAction *func=CCCallFunc::actionWithTarget(this,callfunc_selector(HelloWorld::backFunc));
CCFiniteTimeAction *lc=CCSequence::actions(se,func,CCDelayTime::actionWithDuration(3),rrc,NULL);
[cpp] view
plaincopy
CCActionInterval *ac=CCRotateBy::actionWithDuration(2,270);
CCActionInterval *sc=CCScaleBy::actionWithDuration(2,2,2);
CCFiniteTimeAction *se=CCSpawn::actions(ac,sc,NULL);
CCFiniteTimeAction *rrc=se->reverse();
CCFiniteTimeAction *func=CCCallFunc::actionWithTarget(this,callfunc_selector(HelloWorld::backFunc));
CCFiniteTimeAction *lc=CCSequence::actions(se,func,CCDelayTime::actionWithDuration(3),rrc,NULL);
在se动画运行完了之后调用函数。
CCCallFuncN
函数无返回值,有一个CCNode*的指针
[cpp] view
plaincopy
CCSprite *s=CCSprite::create("sprite.png");
s->setPosition(ccp(0,0));
addChild(s);
CCActionInterval *move=CCMoveBy::create(3,ccp(450,290));
CCFiniteTimeAction *fn=CCCallFuncN::actionWithTarget(this,callfuncN_selector(HelloWorld::funcN));
CCFiniteTimeAction *a=CCSequence::actions(move,fn,NULL);
s->runAction(a);
[cpp] view
plaincopy
CCSprite *s=CCSprite::create("sprite.png");
s->setPosition(ccp(0,0));
addChild(s);
CCActionInterval *move=CCMoveBy::create(3,ccp(450,290));
CCFiniteTimeAction *fn=CCCallFuncN::actionWithTarget(this,callfuncN_selector(HelloWorld::funcN));
CCFiniteTimeAction *a=CCSequence::actions(move,fn,NULL);
s->runAction(a);
回调函数是
[cpp] view
plaincopy
void HelloWorld::funcN(CCNode
*pSender)
{
CCLog("funcN");
CCSprite *s=(CCSprite*)pSender;
CCLog("x=%f,y=%f",s->getPosition().x,s->getPosition().y);
}
[cpp] view
plaincopy
void HelloWorld::funcN(CCNode *pSender)
{
CCLog("funcN");
CCSprite *s=(CCSprite*)pSender;
CCLog("x=%f,y=%f",s->getPosition().x,s->getPosition().y);
}
通过测试,传递进来的pSender其实是运行该函数的精灵的指针。
CCCallFuncND
在调用这个函数的时候,可以传递一个void*的参数
如下使用:
[cpp] view
plaincopy
CCSprite *s=CCSprite::create("sprite.png");
s->setPosition(ccp(0,0));
addChild(s);
CCActionInterval *move=CCMoveBy::create(3,ccp(450,290));
CCFiniteTimeAction *fn=CCCallFuncND::actionWithTarget(this,callfuncND_selector(HelloWorld::funcN),(void*)7);
CCFiniteTimeAction *a=CCSequence::actions(move,fn,NULL);
s->runAction(a);
[cpp] view
plaincopy
CCSprite *s=CCSprite::create("sprite.png");
s->setPosition(ccp(0,0));
addChild(s);
CCActionInterval *move=CCMoveBy::create(3,ccp(450,290));
CCFiniteTimeAction *fn=CCCallFuncND::actionWithTarget(this,callfuncND_selector(HelloWorld::funcN),(void*)7);
CCFiniteTimeAction *a=CCSequence::actions(move,fn,NULL);
s->runAction(a);
回调函数是:
[cpp] view
plaincopy
void HelloWorld::funcN(CCNode
*pSender,void* data)
{
CCLog("funcN");
CCSprite *s=(CCSprite*)pSender;
CCLog("x=%f,y=%f,*data=%d",s->getPosition().x,s->getPosition().y,int(data));
}
[cpp] view
plaincopy
void HelloWorld::funcN(CCNode *pSender,void* data)
{
CCLog("funcN");
CCSprite *s=(CCSprite*)pSender;
CCLog("x=%f,y=%f,*data=%d",s->getPosition().x,s->getPosition().y,int(data));
}
这样可以获得传递过来的数据。
CCCallFuncO
这个函数与CCCallFuncN差不多,只不过回调函数的参数是CCObject*类型。
相关文章推荐
- 【iOS-Cocos2d游戏开发之七】在cocos2d中添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题!更新解决添加组件Cocos2d动画停止播放的BUG】
- 【Cocos2d-x游戏引擎开发笔记(4)】系统动画
- cocos2d-x开发记录:二,基本概念(动作,动画,坐标系统)
- 【Cocos2d-x游戏引擎开发笔记(4)】系统动画
- 【iOS-Cocos2d游戏开发之七】在cocos2d中添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题!【11月28日更新解决添加组件Cocos2d动画停止播放的BUG】
- cocos2d-x3.2中的动画系统
- cocos2d-x 系统动画
- 略解cocos2d-x 延迟动画系统。
- 【iOS-Cocos2d游戏开发之七】在cocos2d中添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题!【11月28日更新解决添加组件Cocos2d动画停止播放的BUG】
- Cocos2d-x 系统动画
- Unity3D之Mecanim动画系统学习笔记(七):IK(反向动力学)动画
- cocos2d一种动画的快方法
- 实习小白::(转) Cocos2d-x 3.0 开发(八)骨骼动画的动态换肤
- Cocos2d-x 中获取动画当前帧数
- Cocos2d-X 精灵帧动画的实现方法
- cocos2d-x 过度动画
- Unity_Legacy动画系统_014
- 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- Legacy动画系统
- cocos2d-x 动画详解之四-CCSpriteFrameCache
- cocos2d-x坐标系统