Моделирование гравитации в XNA

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

namespace Capture
{
class PhysX
{
    static Vector2 g = new Vector2(0.0f, 10.0f);
    public Vector2 pos, vel, acc, accumForce;
    public float mass;
    public bool USE_GRAVITY = true;

    /* Constructor */
    public void Engage(ref GameTime gameTime, uint maxX, uint maxY)
    {

        Vector2 F = Vector2.Zero;
        if (USE_GRAVITY)
        {
            F = accumForce + mass * g;
        }

        acc = F / mass;//This is the Net acceleration, Using Newtons 2nd Law
        vel += acc * gameTime.TotalGameTime.Seconds;// v = u + a*t
        pos += vel * gameTime.TotalGameTime.Seconds;// s = u*t + 0.5*a*t*t, 
        pos.X %= maxX;
        pos.Y %= maxY;

    }

    public void ApplyForce(ref Vector2 f)
    {
        accumForce += f;
    }
}
}

Я вызываю метод PhysX#Engage() в методе Game#Update(GameTime gt). Проблема в том, что я не получаю плавной анимации. Это происходит потому, что позиция вскоре становится очень большой. Чтобы преодолеть это, я попытался взять модуль, как показано в коде с Viewport.Width, Viewport.Height, но все равно координаты позиции совсем не плавные. Что мне делать. Как сделать анимацию плавной? Пожалуйста, помогите.

5
задан batman 24 December 2011 в 14:45
поделиться