`

cocos2d-x动画加速与减速

 
阅读更多

原文http://blog.csdn.net/henren555/article/details/24244021

原作者:扬名天吓

 

      动画是游戏的必然要素之一,在整个游戏过程中,又有着加速、减速动画的需求。以塔防为例子,布塔的时候希望能够将游戏减速,布好塔后,则希 望能将游戏加速;当某个怪被冰冻后,移动速度减缓,而其他怪的移动速度不变。cocos2d-x引擎为我们提供了很强大的接口,下面就将我实验的过程复述 一遍,也方便他人。

1)实现全局的加速、减速。

    通过设置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()停掉之前的动作,不然两个动作就叠加到一起了。

 

—————————————————————–华丽丽的分割线————————————————————————–

 

来自HIMI的提示:

 

很多时候你的主角的动作利用CCAction来实现,移动则是在update刷帧函 数或者一些选择器的方法中进行的,那么为了让你的主角慢动作比较逼真,那么Himi建议不要使用scheduleUpdate函数,因为这个你无法修改每 次调用update的时间默认都是每帧都调用,那么你应该自己定义一个选择器当刷逻辑的函数,这样就能配合CCSpeed实现逼真慢动作拉~

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 scheduler
 sched1 = new CCScheduler();
 defaultScheduler->scheduleUpdateForTarget(sched1, 0, false);
 // Create a new ActionManager, and link it to the new scheudler
 actionManager1 = new CCActionManager();
 sched1->scheduleUpdateForTarget(actionManager1, 0, false);
 // Replace the default ActionManager with the new one.
 pSprite1->setActionManager(actionManager1);

 

通过以上的代码,就可以通过改变sched1的timescale来改变pSprite1的动作的快慢了。有了这种方法,那么就可以放弃CCSpeed的那种方法了。

 

 

 

  • 大小: 21.1 KB
分享到:
评论

相关推荐

    cocos2d-x 2.x action集合(详细注释分类)

    Cocos2d-x是一款开源的游戏开发框架,广泛用于2D游戏、交互式应用程序和教育软件的制作。2.x版本是其历史上的一个重要阶段,提供了丰富的功能和改进。在这个"cocos2d-x 2.x action集合(详细注释分类)"的资源中,你将...

    cocos2d-x 动画演示 源码

    5. **动画缓动效果**:为了使动画看起来更平滑,Cocos2d-x提供了一系列的缓动函数(easing functions),如线性、加速、减速、缓进缓出等。这些缓动函数可以通过`Ease`系列动作附加到`Animate`动作上,以改变动画的...

    cocos2d-x 自学文档

    在cocos2d-x中,CCMenuItem类用于创建菜单项,通常与CCMenu一起使用,创建交互式菜单。菜单项可以响应点击事件,触发相应的回调函数。 六、CCOrbitCamera CCOrbitCamera动作允许对相机进行环绕目标对象的旋转,提供...

    cocos2d-x游戏-转盘抽奖

    综上所述,"cocos2d-x游戏-转盘抽奖"涉及了cocos2d-x引擎的多个核心概念,包括图形渲染、动作动画、事件处理、网络通信以及性能优化等。开发者需要熟练掌握这些知识点,才能构建出既有趣又可靠的转盘抽奖功能。在...

    cocos2d-x使用armature的api说明

    在cocos2d-x这个强大的2D游戏开发框架中,Armature是一个重要的组成部分,它用于创建复杂的骨骼动画。Armature API是cocos2d-x提供的一系列接口,用于操作和控制骨架动画,使得开发者能够创建出更加生动和细腻的游戏...

    cocos2d-x学习笔记(7)--动作(Actions).rar

    在cocos2d-x游戏开发框架中,动作(Actions)是一个关键的概念,它允许开发者创建丰富的动画效果,使游戏中的对象具有动态性。本学习笔记将深入探讨cocos2d-x中的动作系统,帮助你更好地理解和应用这些功能。 1. **...

    【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-速度变化

    本篇主要关注Cocos2d-iPhone中的“动作”(Action)系统,特别是速度变化(EaseSpeed)这一动作类别,它是实现动态效果和游戏动画的关键。 一、Cocos2d-iPhone动作系统概述 Cocos2d-iPhone的动作系统是其核心功能之...

    抽奖转盘实现

    在“抽奖转盘实现”这个项目中,我们将会探讨如何利用Cocos2d-x的图形渲染、动画控制以及事件处理等功能来构建一个交互式的抽奖界面。 首先,我们需要设计转盘的布局。Cocos2d-x提供了Sprite类用于显示图片,我们...

    TheCars:cocos2d-js 引擎的简单游戏

    cocos2d-js是由Cocos2d-x团队开发的一款开源游戏引擎,它结合了cocos2d-x的高性能和JavaScript的易用性,使得开发者能够利用HTML5技术进行游戏开发。引擎提供了丰富的2D图形渲染、物理引擎、动画系统、音频管理等...

    Cocos瞬间动作

    此外,Cocos2d-x的动作系统还支持动作缓动(Ease Actions),可以改变动作的速度曲线,如加速(EaseIn)、减速(EaseOut)或先加速后减速(EaseInOut)。这些缓动函数使得动画看起来更加自然和流畅。 总的来说,...

    cocos2dx 数字滚动特效源码

    6. **缓动函数**:为了让滚动动画更自然,可以使用Cocos2d-x内置的缓动函数(如EaseInOut、EaseExponentialInOut等)来调整动画速度的变化,使得数字在开始和结束时有加速和减速的效果。 7. **代码复用**:为了提高...

    ActionDemo

    Cocos2d-x的动作系统是游戏场景中物体动画的核心部分,它允许开发者创建各种复杂的动态效果。Action可以理解为一个描述物体运动或变化的指令,例如移动、旋转、缩放、淡入淡出等。在ActionDemo中,我们可以看到如何...

    CocosApp实战(9) -- 动作行为.zip

    Cocos2d-x是一款流行的开源跨平台2D游戏开发框架,广泛应用于移动设备和桌面平台。在本实战项目“CocosApp实战(9) -- 动作行为”中,我们将深入探讨cocos2d-x中的动作系统,它为游戏对象提供了丰富多样的动态效果,...

    开发html5 2d 赛车游戏以及打包发布为手机APP 第一话 工欲善其事

    3. 碰撞检测:当赛车与其他物体(如障碍物或边界)发生碰撞时,需要进行检测并处理相应的事件,例如减速、翻车等。 4. 用户交互:处理键盘或触摸事件,使玩家能够控制赛车的方向和速度。 5. 动画与精灵:创建赛车...

    cocoslua 3d搓牌效果

    cocoslua是cocos2d-x与lua结合的产物,它使得开发者可以使用lua语法来编写cocos2d-x的游戏代码,简化了开发流程。"cocoslua 3d搓牌效果"是一个在cocoslua环境中实现的3D搓牌特效,通常用于扑克牌类或者赌场风格的...

    cocos2dx 2.2.1 自定义进度条

    综上所述,自定义Cocos2d-x 2.2.1的进度条涉及到图形渲染、动画、事件处理等多个方面,需要结合实际项目需求进行设计和实现。通过阅读提供的博客链接(http://write.blog.csdn.net/postlist)可以获得更具体的实现...

    cocos2d C++ Tower Defence bata0.3

    在《cocos2d C++ Tower Defence》中,玩家可以利用有限的资源选择和放置不同类型的防御塔,每种塔都有其独特的攻击方式和能力,如远程攻击、近战攻击、范围伤害或减速效果。玩家需要根据敌人的种类、数量和路线进行...

    cocos捕鱼达人路线编辑器

    6. **兼容性**:由于基于Cocos2d框架,这款编辑器与Cocos2d-x或Cocos Creator等开发工具紧密结合,保证了路线数据在游戏中的无缝集成。 在实际开发中,"fish"这个文件可能包含了路线编辑器的示例数据或者预设的鱼类...

    TowerDefence:一个游戏 !

    在游戏开发过程中,Cocos2d-x提供了一系列的工具和API,用于场景管理、精灵动画、物理引擎、粒子系统、触摸事件处理等。例如,开发者可以使用Scene类来组织游戏的不同阶段,Sprite类来创建和操控游戏中的角色和物体...

    cocos2dx惯性拖动

    Cocos2d-x是一款流行的开源游戏开发框架,广泛应用于2D游戏、应用和互动媒体的制作。在这个场景中,我们关注的是"惯性拖动"的功能,这是一个在触摸屏设备上常见的用户交互模式,通常用于实现平滑的滚动效果。在Cocos...

Global site tag (gtag.js) - Google Analytics