我有一个游戏,我想为UI的某些对象设置动画,并且我想在动画中使用某种平滑的步骤。如何使用for循环或使用主要更新代码来做到这一点?
例如我有这个代码
void CGameClass::Update() {
// doing game stuff here
}
在这部分代码中,我想将代码放入这些动画中,例如,将记分牌从X移到Y,并且我不希望这些代码是线性的,我想制作一个这两个值使步伐平稳。
编辑::我找到了一个可以做到这一点的函数,但是它是线性的
float LinearInterpolate(float v1, float v2, float a)
{
return v1*(1.0f - a) + v2*a;
}
如何旋转此代码使其成为正弦曲线?
答案 0 :(得分:1)
三次贝塞尔曲线函数使用两个控制点P1和P2定义起点P0和终点P3之间的路径。在您链接的网站中,我们有:
给定时间t
([0..1]),评估贝塞尔曲线会给您x
和P0
之间的位置P3
。
根据您的情况,您希望产生一个职位p
,如下所示:
point p = X + (Y - X) * CubicBezier(point(0, 0), point(0.755, 0.05), point(0.855, 0.06), point(1, 1), t)
= X + (Y - X) * (3 * pow(1-t, 2) * t * point(0.755, 0.05)
+ 3 * pow(t, 2) * (1-t) * point(0.855, 0.06) + pow(t, 3) * point(1, 1)
在此代码中,X和Y是一些神奇的point
类型的输入,支持加法,减法和标量乘法。 t
是自动画开始以来的时间(根据一定比例)。 (例如,对于耗时5秒的动画,它可能是(now - start) / 5
)
如您所见,如果t = 0,则P = X,如果t = 1,则P =Y。确保t
在[0..1]范围内是您的责任。