Допустим, у меня есть метод, который управляет движением некоторых персонажей, например:
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 ); }
}
maxspeed = 300 и accel = 2 (также speedx начинается с 0)
Теперь в этом нет ничего плохого, пока я не добавлю в уравнение постоянное замедление / трение. По сути, у меня постоянное замедление 1
, которое вычитается из скорости каждого кадра. Это так, если персонаж не движется, он постепенно останавливается.
Проблема заключается в следующем: если speedx = 299
из-за замедления, оператор my if остается верным, и он продолжает прибавлять accel
, что повышает скорость до 301, после максимальной скорости.
Какими были бы хорошие решения этой проблемы, которые позволили бы мне иметь любые значения ускорения и замедления, а не приводить в порядок оператор if?