В основном вы хотите использовать физику на уровне старшей школы уравнения движения (статья в Википедии).
Для движения снаряда это важное уравнение:
s = s₀ + v₀t + ½at²
(Смещение равно: начальное смещение, плюс начальная скорость, умноженная на время, плюс половина ускорения, умноженная на квадрат времени.)
Скажем, у вас есть снаряд, движущийся в 2D.Вы в основном запускаете это уравнение для каждого измерения.В направлении X у вас будет начальная позиция и некоторая начальная скорость, но без ускорения.
В направлении Y у вас будет начальная позиция, начальная скорость и ускорение вниз из-за силы тяжести.
Все, что вам нужно сделать, это следить за временем, прошедшим после того, как ваш снаряд был запущен, и рисовать спрайт в рассчитанной позиции.
Вот примерный код XNA - как вы можете видеть, я могу просто рассчитать обаОси сразу:
Vector2 initialPosition = Vector2.Zero;
Vector2 initialVelocity = new Vector2(10, 10); // Choose values that work for you
Vector2 acceleration = new Vector2(0, -9.8f);
float time = 0;
Vector2 position = Vector2.Zero; // Use this when drawing your sprite
public override void Update(GameTime gameTime)
{
time += (float)gameTime.ElapsedGameTime.TotalSeconds;
position = initialPosition + initialVelocity * time
+ 0.5f * acceleration * time * time;
}
Используя небольшую алгебру, вы можете использовать те же уравнения движения, чтобы вычислять, с какой скоростью запускать ваш снаряд, чтобы попасть в определенную точку.