zoukankan      html  css  js  c++  java
  • 动作-CCActionInterval之CCActionEase家族

    补间动作也是一个包装器(之前叫补间动画,从字面上讲,叫动作更合适一些。)。你也可以叫他缓释动作。

    1.含义

    补间动作改变的是,内部动作的执行速率(注意,并没有改变执行的最终效果,和执行的时间。)关于这个含义,我们用图表表示,横轴表示时间,纵轴表示位移。

    说明: 72533227[1][1]

    假设我们有一个动作,4秒内按(100100)的增量进行移动

    1. CCMoveBy::actionWithDuration(4.0f, ccp(100,100));

    假设我们的机器比较操蛋,一秒一帧(用绿线切割)。假设初始节点在(00)点,那么这四秒移动的点位置分别是(2525)(5050)(7575)(100100)。

    他的位移时间关系就是图上的蓝线,从图上可以清晰看出,移动是按照匀速速率进行的。

    现在我们使用CCEaseSineInOut做包装器,包装这个动作:

    1. CCEaseSineOut::actionWithAction(CCMoveBy::actionWithDuration(4.0f, ccp(100,100)));

    他的位移时间关系变成图上的红线,从图上可以清晰看出,移动是非匀速速率进行的,先慢后快。那么被绿线截取的位移点的位置,也会发生变化。

    从这个图可以看出,使用补间动作,并没有改变位移和时间,但是改变了动作的执行速率,从匀速执行变为非匀速执行。

    2.原理

    通过包装器,每一个补间动画,都改变了内部动作的执行速率,这是通过封装代理update函数完成的,例如前面的CCEaseSineOut

    1. void CCEaseSineOut::update(ccTime time) {

    2.             m_pOther->update(sinf(time * (float)M_PI_2));

    3. }

    3.后缀解释

    补间动作有三种后缀:

    In:表示动作执行先快后慢

    Out:表示动作执行先慢后快

    InOut:表示动作执行快--

    第二部分:使用补间动作

    不同的补间动画有不同的ST图。可以在这里查看和运行效果

    http://www.robertpenner.com/easing/easing_demo.html

    你可能觉得这种执行方式很奇怪。但这样可以做出很不错的效果,比你自己手动调整要快的多,因为这些曲线都是来自于数学计算,而这些数学公式,都是从实际的物体运行中总结出来的。

    使用举例:比如你要做一个皮球落地的动作,就可以用CCEaseBounceOut。具体效果你可以用上面的地址运行一下。

    第三部分:CCSpeed

    CCSpeed也是一个包装器,区别于补间动作,他是真正可以改变内部动作执行时间(Duration)的。

    1. CCActionInterval *move = CCMoveBy::actionWithDuration(3,ccp(350,0));

    2. CCSpeed *speed= CCSpeed::actionWithAction(move,2.0f);   // 调整为2倍速运行

    使用举例:这个动作经常用来做慢镜头和快进。

  • 相关阅读:
    在vue项目中引用element-ui时 让el-input 获取焦点的方法
    vue cli 平稳升级webapck4
    如何在 vuex action 中获取到 vue 实例
    Vue主要原理最简实现与逻辑梳理
    vue自定义指令clickoutside扩展--多个元素的并集作为inside
    关于使用element中的popup问题
    教你如何检查一个函数是否为JavaScript运行时环境内建函数
    用 Vue 做一个简单的购物app
    vue 手机键盘把底部按钮顶上去
    基于Linux的智能家居的设计(2)
  • 原文地址:https://www.cnblogs.com/yssgyw/p/3430215.html
Copyright © 2011-2022 走看看