我正在尝试为图片制作动画。
每次我的整个渲染场景出现时,它都会循环到动画中的下一个图像。
我需要减慢/加速/降低到任意值。
这样做的常用程序是什么?
这是我到目前为止所尝试的:
FrameTime.h
static class FrameTime
{
public:
FrameTime();
static int current;
static int max;
static int step;
static void Update();
};
FrameTime.cpp
int FrameTime::current = 0;
int FrameTime::max = 100;
int FrameTime::step = 1;
void FrameTime::Update()
{
if( current >= max )
{
current = 0;
}
else
{
current += step;
}
}
如何调用Update函数:
// Game Render function starts
...
FrameTime::Update();
// Game Render function ends
如果我的播放器动画应该更新,我的工作原理如下:
void PlayerStateFlying::Update()
{
if( FrameTime::current % 2 )
{
current = sequence[ index ];
if( index == ( sequenceAmount - 1 ) )
{
index = 0;
}
else
{
index++;
}
}
}
问题是上面的代码不允许我有浮动精度的速度。
答案 0 :(得分:1)
您可以这样做:
fps
,用于保存动画在delta
毫秒total
并开始每帧delta
递增total
递增后,检查是否(1000 / fps > total)
,
total / (1000 / fps)
帧的动画并将总数更新为fmod(total, (1000 / fps))
答案 1 :(得分:-1)
我希望你对物理学如何应用有所了解
处理对象的速度,在其他方面,它意味着控制您需要实现牛顿动力学的对象的移动。这由三个运动定律描述:
身体将保持静止状态,或继续沿直线路径移动,直到对其施加力量
身体的加速度与净力的变化成正比。
对于每一个动作都有一个相同而相反的反应。
第一定律意味着:当且仅当另一个力被添加到其上或施加到其上时,物体才会改变其速度。例如:如果球在直线上移动,它将保持直线移动,直到外力施加到它上面。现在这个外部可以是任何东西,它可能是风减慢它或通过摩擦。
第二定律意味着:当一个力被施加到一个物体上时,它会改变物体的速度,第二个定律就是这个变化:
第三定律意味着:如果你打墙,墙会对你施力。所以行动是冲墙,反应是墙对你施加一股力量。
为了在游戏中实施法则,我们使用数值积分(处理对象的位置和加速度)
最常用的是半隐式欧拉积分
dt是自上一帧以来经过的时间。
NextVelocity = ThisVelcoity + CurrentAcceleration * dt;
NextPosition = ThisPosition + NextVelocity * dt;