Прежде всего, поскольку у вас есть 2d, а не 1d игра, вам нужно, чтобы ваша скорость составляла
class Vector
{
double x;
double y;
}
в этом классе, вам следует поддерживать положение и скорость.
Так какВы 2d сверху вниз, вам нужно будет реализовать некоторые .RotateLeft()
и .RotateRight()
для вектора скорости.
Вращение будет реализовано следующим образом:
x' = cos(a) * x - sin(a) * y
y' = sin(a) * x + cos(a) * y
И вы 'Вам придется реализовать ваш метод .Move()
следующим образом:
void Move(Vector v)
{
x+=v.x;
y+=v.y;
}
РЕДАКТИРОВАТЬ: пожалуйста, спросите, требуется ли разъяснение, или более подробное обсуждение.
Также вы можете использоватьтаймер здесь, но попробуйте рассчитать время, потраченное с момента последнего события таймера, а затем умножить скорость на это значение при добавлении к текущей позиции, таким образом вы получите более точную позицию.
a в sin()
и cos()
будет углом в радианах, и вам, вероятно, здесь понадобятся градусы.
Вот что-то , чтобы вы могли ориентироваться в градусах и радианах.