XNA 2Dのゲームで重力によって2dスプライトをアニメートしようとしています。私は、シミュレーション効果を達成するための非常に基本的なクラスを開発しました。これは私のサンプルコードです。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;
}
}
}
私はGame#Update(GameTime gt)
方法でPhysX#Engage()
メソッドを呼んでいます。 問題はこれです。滑らかなアニメーションが得られません。これは、すぐに位置が非常に大きくなるためです。これを克服するために、Viewport.Width, Viewport.Height
のコードに示されているようにモジュラスを取ろうとしましたが、依然として位置座標は全く滑らかではありません。私は何をすべきか。アニメーションをスムーズにする方法は?助けてください。
は何であるあなたの解像度に応じて描画する前に、自分の価値観を変えますあなたの質量は?質量が大きいほど加速が遅くなります。 –
@ SteveH力の質量項と質量による除算は相殺されます。重力加速度は質量に依存しない。 – CodesInChaos
@Anuragあなたのスピードは時間とともに直線的に増加します。通常は、摩擦をシミュレートして端末速度を制限するために、速度において線形な減速項を導入します。 – CodesInChaos