Первое уравнение описывает движение объекта, который подвергается постоянной силе.Объект начинается с позиции x (0) и имеет скорость v (0).И x, и v являются векторами, поэтому в 2D-шутере x (0) будет (x0, y0) или xy-позицией, а v (0) будет (vx0, vy0).
Если силы тяжести нет, то F = 0 на неходовых снарядах (снарядах без движителей), поэтому скорость будет постоянной.
x (t1) = x (t0) + vx * (t1-t0) y (t1) = y (t0) + vy * (t1-t0)
t1-t0 или dt (delta-t) - время, прошедшее с момента последнего обновления позиции снаряда.
Если на объекте действует сила тока или сила тяжести, скорость будет меняться со временем.
vx (t1) = vx (t0) + ax * (t1-t0) vy (t1) = vy(t0) + ay * (t1-t0)
a - ускорение.В игре вам обычно не нужны масса и сила, только ускорение.В физике a = F / m.
Редактировать 1: В компьютерных играх вы очень часто обновляете положение объекта (обычно около 60 раз в секунду).У вас есть положение и скорость объекта в предыдущем обновлении, и вы хотите вычислить новую позицию.
Вы обновляете позицию, предполагая, что скорость была постоянной:
positionVectorAt(newTime) = positionVector(lastTime) + velocityVector*(newTime - lastTime);
Еслискорость объекта изменяется, вы также обновляете скорость:
velocityVectorAt(newTime) = velocityVector(lastTime) + accelerationVector*(newTime - lastTime);
Допустим, у нас есть спрайт в
positionVector.x=100;
positionVector.y=10;
Начальная скорость
velocityVector.x = 3;
velocityVector.y = -10;
Спрайт использует двигатели, которые дают горизонтальное ускорение в секунду
thrusterVector.x= 5;
, а также подвержены гравитации, которая дает вертикальное ускорение в секунду
gravityVector.y = -10;
Кодобновить позицию спрайтов будет:
deltaTime = now - lastTime; // Time elapsed since last position update
// Update the position
positionVector.x = positionVector.x + velocityVector.x * deltaTime;
positionVector.y = positionVector.y + velocityVector.y * deltaTime;
// Update the velocity
velocityVector.x = velocityVector.x + (thrusterVector.x + gravityVector.x) * deltaTime;
velocityVector.y = velocityVector.y + (thrusterVector.y + gravityVector.y) * deltaTime;
// Done! The sprite now has a new position and a new velocity!