可以说我有一个控制某些字符移动的方法,如下所示:

void Player::moveRight( Uint32 ticks )
{
    if( speedx < maxspeed ) { speedx += accel; }
    x += speedx * ( ticks / 1000.f );
    //collision
    if( x > (float)( 800 - width ) ) { x = (float)( 800 - width ); }
}



现在没有任何问题,直到我将恒定的减速度/摩擦力添加到方程中。基本上,我有一个恒定的1减速度,它从每帧的速度中减去。因此,如果角色不动,他们将逐渐停止。

问题是这样的:如果由于减速而导致speedx = 299,我的if语句仍然为真,并且它将继续添加accel,从而使速度提高到301,超过了maxspeed。

有什么好的办法可以解决这个问题,这将使我拥有任何加速和减速值,而不会使if语句跳闸?

最佳答案

更改为:

if (speedx + accel > maxspeed) { speed = maxspeed; }
else speed += accel;

在这种情况下,如果加速度导致速度超过最大速度,则只需将速度设置为最大。否则就是会像往常一样加速。

或者,您可以执行以下操作:
speedx = min(speedx + accel, maxspeed);

关于c++ - C++增量问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7466299/

10-11 18:15