教你在Cocos2D-X中如何计算JumpBy中的y轴的分量

    作者:课课家教育更新于: 2019-03-29 10:58:12

      我们平时在游戏开发中经常会使用到JumpBy,那么JumpBy中的抛物线弹跳原理又是什么呢?本篇教程将教你在Cocos2d-x中如何计算JumpBy中的y轴的分量。

      JumpBy通过模拟抛物线跳动来改变一个节点的位置。

      static JumpBy* create(float duration, const Vec2& position, float height, int jumps);

      duration 整个动作持续多少秒

      position 每次跳跃的偏移距离

      height 跳多高

      jumps 跳多少次

      void JumpBy::update(float t)

      {

      // parabolic jump (since v0.8.2)

      if (_target)

      {

      float frac = fmodf( t * _jumps, 1.0f );

      float y = _height * 4 * frac * (1 - frac);

      上面这两行比较难以理解,

      这里首先要弄清楚参数t的含义,通过查看源码可知,t是已过去的时间elapsed和动作总时间duration的比值,也就是说

      t = elapsed/duration, 表示整个动作进度的百分比,取值0~1。

      由于我们需要在duration秒内跳jumps次,那么每次跳跃需要时间

      t1 = duration/jumps,

      可推出

      t * jumps

      = elapsed *jumps/duration

      = elapsed /t1

      假设当前已跳完n次,正在跳第n+1次,且第n+1次已过去p秒,则

      elapsed=n*t1+p

      于是,

      t * jumps = (n*t1 + p)/t1=n+p/t1

      于是就得出

      float frac

      =fmodf(t*jumps,1.0f)

      =p/t1

      =当前跳跃已完成的百分比

    教你在Cocos2D-X中如何计算JumpBy中的y轴的分量_Cocos2D-X抛物线_Cocos2D-X JumpBy_Cocos2D-X技巧_课课家

      好,现在已经弄明白frac的含义了,下面就简单了,

      以frac为横坐标,高度为纵坐标建立坐标系,考虑如上图的抛物线,y=a*x*x+b*x+c,我们以节点起跳的位置为原点,则

      在x=0处,高度为0,因为还没起跳

      在x=1处,高度为0,因为已经落地

      在x=0.5处,高度达到最高点height

      所以得出

      c=0,

      a+b+c=0,

      a/4 +b/2+c=height,

      解方程组得到

      c=0,

      a=-4*height,

      b=4*height,

      于是原方程可表示为

      y=-4*height*x*x+ 4*height*x

      =4*height*x*(1-x)

      到此完全推导出代码中的公式

课课家教育

未登录