Анимированный спрайт по кривой в XNA - PullRequest
3 голосов
/ 18 июля 2010

Я хотел бы реализовать баллистическую траекторию в игре XNA и пытался найти лучший способ заставить снаряд следовать гравитационной кривой.

Лучшее, что я могу придумать, - это просто сначала вычислить кривую и сохранить в классе "Кривая". Затем заставьте спрайт двигаться по этой кривой.

Но я не могу понять, как на самом деле перемещать спрайт по этой кривой.

Как бы я это сделал, или есть просто лучший способ?

1 Ответ

9 голосов
/ 18 июля 2010

В основном вы хотите использовать физику на уровне старшей школы уравнения движения (статья в Википедии).

Для движения снаряда это важное уравнение:

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;
}

Используя небольшую алгебру, вы можете использовать те же уравнения движения, чтобы вычислять, с какой скоростью запускать ваш снаряд, чтобы попасть в определенную точку.

...