可以说我有一个控制某些字符移动的方法,如下所示:
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/