XNA 3D 抛物线的算法,该如何处理
XNA 3D 抛物线的算法
请各位大虾们,帮帮忙:
我现在在用XNA编写一个3D坦克的游戏,可是在坦克发射炮弹问题上遇到了瓶颈,现在坦克可以发射炮弹,但是炮弹的运动轨迹是一条直线,我想让它运行抛物线的形式。不知道这个算法该如何写。在此求教给位了
------解决方案--------------------
请各位大虾们,帮帮忙:
我现在在用XNA编写一个3D坦克的游戏,可是在坦克发射炮弹问题上遇到了瓶颈,现在坦克可以发射炮弹,但是炮弹的运动轨迹是一条直线,我想让它运行抛物线的形式。不知道这个算法该如何写。在此求教给位了
------解决方案--------------------
public void FireMissile()
{
foreach (GameObject missile in missiles)
{
if (!missile.alive)
{
missile.velocity = GetMissileMuzzleVelocity();
missile.position = GetMissileMuzzlePosition();
missile.rotation = missileLauncherHead.rotation;
missile.alive = true;
break;
}
}
}
public Vector3 GetMissileMuzzleVelocity()
{
Matrix rotationMatrix = Matrix.CreateFromYawPitchRoll(missileLauncherHead.rotation.Y, missileLauncherHead.rotation.X, 0);
return Vector3.Normalize(Vector3.Transform(Vector3.Forward, rotationMatrix)) * missilePower;
}
public Vector3 GetMissileMuzzlePosition()
{
return missileLauncherHead.position + (Vector3.Normalize(GetMissileMuzzleVelocity()) * launcherHeadMuzzleOffset);
}
private float gravity=0.98f;
void UpdateMissiles()
{
foreach (GameObject missile in missiles)
{
if (missile.alive)
{
//加一个重力加速度
missile.velocity.Y+=gravity;
missile.position += missile.velocity;
if (missile.position.Z < -1500.0f)
{
missile.alive = false;
// update the calculation
range = calculateRange();
height = calculateHeight();
time = calculateTime();
}