首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

XNA 3D 抛物线的算法,该如何处理

2013-11-23 
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();

                    }


                }
            }
        }


[解决办法]
3D坦克游戏。

Box2D不是一个2D collision 引擎么。←_←


另外抛物线这种东西学过初中物理应该知道



水平速度保持不变,处置速度根据加速度增大就好。检测到碰撞物体就爆炸即可
float x,y,z;//x,y,z坐标
float dx,dy,dz;//x,y,z方向的速度
float gravity;//重力加速度 一般60FPS的游戏程序设定为0.098差不多。
foreach(frame in animation)
{
    x+=dx;
    y+=dy;
    z+=dz;
    y+=gravity;
    if(collisionJudge() == true)
          explode();
}

热点排行