Я пытаюсь оживить двухмерный спрайт в моей игре XNA 2D силой гравитации.Я разработал очень простой класс для достижения эффекта симуляции.Это мой пример кода.
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
, но все же координаты положения не совсем гладкие.Что я должен делать.Как сделать анимацию плавной?Пожалуйста помоги.