我在做一个小游戏,是三维环境中坦克射击游戏,现在的问题是虽然子弹成功加载了,也能发射出去,但子弹却只能朝着一个方向射击,因为坦克是可以在地图上随便转向的,所以我希望炮弹能跟随坦克的指向发射炮弹,请各位帮在下这个忙,谢谢了。

解决方案 »

  1.   

    这个以你发射位置为0,0 看对方的x和y 用三角函数求出角度,然后把你的x值乘以sin,y乘以cos他该是这个样子把
      

  2.   

    To kudoran:
      看来是我描述问题的能力不行,打个比方吧,游戏运行后,坦克的初始化方向朝向南方,这个时候我发射炮弹,炮弹的方向是朝南方发射,随意转动炮筒,炮弹的方向也跟炮筒的方向一致,但是如果在初始化后,我把坦克的方向朝向东方,而不是南方,这是发射炮弹,炮弹的发射方向依旧是指向南方,如果这时再转动炮筒,那么炮筒方向和炮弹方向就会有一个角度差。
      不知我这样描述,是不是可以让你理解清楚
      

  3.   

    炮弹的方向是在初始化炮弹时传递的参数,
    void FireMissile()
            {
                foreach (GameObject missile in missiles)
                {
                    if (!missile.alive)
                    {
                        missile.velocity1 = GetMissileMuzzleVelocity();
                        missile.position1 = GetMissileMuzzlePosition();
                        missile.rotation1 = tank.Rotation;
                        missile.alive = true;
                        break;
                    }
                }
            }        Vector3 GetMissileMuzzleVelocity()
            {
                Matrix rotationMatrix =
                    Matrix.CreateFromYawPitchRoll(tank.Rotation.Y,tank.Rotation.X,0);            return Vector3.Normalize(
                    Vector3.Transform(Vector3.Forward,
                    rotationMatrix)) * missilePower;
            }        Vector3 GetMissileMuzzlePosition()
            {
                return tank.Position +
                    (Vector3.Normalize(
                    GetMissileMuzzleVelocity()) * launcherHeadMuzzleOffset);                    
            }
                    void UpdateMissiles()
            {
                foreach (GameObject missile in missiles)
                {
                    if (missile.alive)
                    {
                        missile.position1 += missile.velocity1;
                        if (missile.position1.Z < -6000.0f)
                        {
                             missile.alive = false;
                        }
                     }
                }
            }在FireMissile()函数中
                           missile.velocity1 = GetMissileMuzzleVelocity();
                        missile.position1 = GetMissileMuzzlePosition();
                        missile.rotation1 = tank.Rotation;
    这三条语句分别初始化炮弹的速度,初始位置,和方向,tank.Rotation是我在tank类中定义的一个三维向量(vector3 Rotation=vector3.Zero;),Rotation.X用来记录炮筒的上下转动值,Rotation.Y用来记录炮筒的左右旋转值,
    这样做的结果是,炮弹方向只受炮筒旋转方向的控制,而我是想如果我在游戏时不旋转炮筒,只旋转坦克,炮筒的指向随着坦克的旋转而改变,这个时候再发射炮弹,炮弹的方向依旧跟炮筒的方向一致你后面提出的想法,我觉得很可行,可是还没理清实现这部分代码的逻辑。试试吧。呵呵 ,还是得谢谢你的帮助,谢谢
      

  4.   

    谢谢 Kudo Ran和  波导终结者  这两位朋友 我的问题已解决。十分感谢