Cocos2dx源码分析之JumpBy的实现
大部分内容转载自 搬砖老男人 所撰写的 “Cocos2dx源码分析之JumpBy的实现” 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);
// 此时刻,从起始点到目的地y轴移动的分量,加上此时刻的跳跃动作y轴移动的分量。
y += _delta.y * t;
float x = _delta.x * t; // 此时刻,从起始点到目的地x轴移动的分量。
#if CC_ENABLE_STACKABLE_ACTIONS // 支持多个动作同时作用于同一物体上的效果。
Vec2 currentPos = _target->getPosition();
Vec2 diff = currentPos - _previousPos;
_startPosition = diff + _startPosition;
Vec2 newPos = _startPosition + Vec2(x,y);
_target->setPosition(newPos);
_previousPos = newPos;
#else
_target->setPosition(_startPosition + Vec2(x,y)); // 更新位置。
#endif // !CC_ENABLE_STACKABLE_ACTIONS
}
}
下面这两行比较难以理解, float frac = fmodf( t * _jumps,1.0f );
float y = _height * 4 * frac * (1 - frac);
这里首先要弄清楚参数t的含义,通过查看源码可知,t是已过去的时间elapsed和动作总时间duration的比值,也就是说 于是就得出 所以得出 解方程组得到 于是原方程可表示为 到此完全推导出代码中的公式 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |