帧化独立动画问题

时间:2011-12-25 05:05:32

标签: c++ animation

无论出于何种原因,我的角色向右移动得比右边快。它的速度至少快两倍。

以下是检查角色移动的代码部分:

if(moving)
{
    Uint32 delta = g_delta_get_ticks();
    if(!g_holding_a) 
    {
        position.x += accel * (delta / 1000.f);
        facing = right;
    }
    if(!g_holding_d) 
    {
        position.x -= accel * (delta / 1000.f);
        facing = left;
    }
}

现在,我的第一个猜测是计时器表现得很有趣,但是,即使放置像accel * (50 / 1000.f)这样的静态值也会产生相同的行为。

现在,如果我只是告诉职位是+= and -= 2,那就可以了。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我怀疑截断会导致你的麻烦。当您说some_int += some_float(或some_int -= some_float)时,算术以浮点方式完成,然后截断为整数。因此,如果some_int为100且some_float为1.5,那么在some_int += some_float之后,您将获得101(从101.5截断)。但是在some_int -= some_float之后,你得到98(从98.5截断)。

由于您GLuint使用的是position.x,因此请在添加或减去调整之前将调整截断为GLuint

GLuint d = accel * (delta / 1000.f);
if (!g_holding_a) {
    position.x += d;
    facing = right;
}
if (!g_holding_d) {
    position.x -= d;
    facing = left;
}