Sto provando ad animare uno sprite 2d nel mio gioco XNA 2D, dalla forza di gravità. Ho sviluppato una classe molto semplice per ottenere l'effetto di simulazione. Questo è il mio codice di esempio.Simulazione della gravità in 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;
}
}
}
che sto chiamando il metodo PhysX#Engage()
in Game#Update(GameTime gt)
metodo. Il problema è che non sto ottenendo un'animazione fluida. Questo perché la posizione diventa molto grande presto. Per superare quello che ho provato a prendere modulo, come mostrato nel codice con il Viewport.Width, Viewport.Height
ma ancora le coordinate di posizione non sono affatto lisce. Cosa dovrei fare. Come rendere l'animazione liscia? Per favore aiuto.
Che cosa è la tua messa? maggiore è la massa, più lenta accelerazione. –
@SteveH il termine di massa nella forza e la divisione per massa si cancellano. L'accelerazione per gravità non dipende dalla massa. – CodesInChaos
@ Anurag La tua velocità aumenta in modo lineare con il tempo. Di solito si introduce un termine di rallentamento lineare nella velocità per simulare l'attrito e limitare la velocità terminale. – CodesInChaos