通过设置Scheduler的timeScale,可以实现全局的加、减速。代码非常简单:
|
|
CCScheduler* pScheduler = CCDirector::sharedDirector()->getScheduler();pScheduler->setTimeScale(2.0f);//实现加速效果pScheduler->setTimeScale(0.5f);//实现减速效果 |
2)实现对某个CCActionInterval动作的加速、减速
方法一:很容易想到的一个方法就是改变CCAnimation的delay unit。代码如下:
|
|
CCAnimation* pAnimation = CCAnimationCache::sharedAnimationCache()->animationByName(“xxx”); pAnimation->setDelayUnit(pAnimation->getDelayUnit()*0.2f);//速度为原来的5倍 |
这个方法有一个缺点:改变了CCAnimationCache中这个animation的delay unit。也就是说以后即使再从CCAnimationCache中获取这个animation,其delay unit已经是原来的0.2倍了。
方法二:cocos2d-x提供了CCSpeed的类,可以实现动画速度的调节。用法如下:
|
|
CCActionInterval* pActionInterval = CCMoveTo::create(5.0f, ccp(500.0f, 100.0f)); CCSpeed* pSpeed= CCSpeed::create(pActionInterval, 1.5f);//1.5倍速运行 CCSpeed* pSpeed1 = CCSpeed::create(pActionInterval, 0.2f);// 0.2倍速运行 pSprite->runAction(pSpeed); |
注意,如果pSprite有已经运行的动作,要用pSprite->stopActionByTag()停掉之前的动作,不然两个动作就叠加到一起了。
3)对某个CCFiniteTimeAction类型动作的加速、减速
大部分时候,一个游戏人物的动作并非由单一一个CCActionInterval类型的动作构成,而是一串动作连起来,构成一个Sequence。用CCSequence::create(…)创建的对象都是CCFinteTimeAction类型的,CCSpeed并不适用。在CCSpeed类的说明里,明确指出”This action can’t be Sequenceable because it is not an CCIntervalAction”。那对于Sequence就束手无策了吗?非也。cocos2d-x引擎自带例子中,schedulerTest给我们展示了如何控制某个sprite的 scheduler的timescale。废话少说,直接看代码。
在class TwoSchedulers中定义了两个customer的scheduler和两个CCActionManager。
|
|
CCScheduler *sched1;CCScheduler *sched2;CCActionManager *actionManager1;CCActionManager *actionManager2; |
在onEnter函数中,分别对两个sprite设置customer的ActionManager.
|
|
CCScheduler *defaultScheduler = CCDirector::sharedDirector()->getScheduler();// Create a new scheduler, and link it to the main schedulersched1 = newCCScheduler();defaultScheduler->scheduleUpdateForTarget(sched1, 0,false);// Create a new ActionManager, and link it to the new scheudleractionManager1 =
new CCActionManager();
sched1->scheduleUpdateForTarget(actionManager1, 0,false);// Replace the default ActionManager with the new one.pSprite1->setActionManager(actionManager1); |
通过以上的代码,就可以通过改变sched1的timescale来改变pSprite1的动作的快慢了。有了这种方法,那么就可以放弃CCSpeed的那种方法了。
本文介绍了如何在cocos2d-x中实现全局加速与减速,包括通过设置Scheduler的时间尺度、对CCActionInterval动作的加速与减速以及对CCFiniteTimeAction类型动作的加速与减速的方法。
1317

被折叠的 条评论
为什么被折叠?



