无论出于何种原因,我的角色向右移动得比右边快。它的速度至少快两倍。
以下是检查角色移动的代码部分:
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
,那就可以了。有什么想法吗?
答案 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;
}