一个游戏炮弹指向的问题 我在做一个小游戏,是三维环境中坦克射击游戏,现在的问题是虽然子弹成功加载了,也能发射出去,但子弹却只能朝着一个方向射击,因为坦克是可以在地图上随便转向的,所以我希望炮弹能跟随坦克的指向发射炮弹,请各位帮在下这个忙,谢谢了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个以你发射位置为0,0 看对方的x和y 用三角函数求出角度,然后把你的x值乘以sin,y乘以cos他该是这个样子把 To kudoran: 看来是我描述问题的能力不行,打个比方吧,游戏运行后,坦克的初始化方向朝向南方,这个时候我发射炮弹,炮弹的方向是朝南方发射,随意转动炮筒,炮弹的方向也跟炮筒的方向一致,但是如果在初始化后,我把坦克的方向朝向东方,而不是南方,这是发射炮弹,炮弹的发射方向依旧是指向南方,如果这时再转动炮筒,那么炮筒方向和炮弹方向就会有一个角度差。 不知我这样描述,是不是可以让你理解清楚 炮弹的方向是在初始化炮弹时传递的参数,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用来记录炮筒的左右旋转值,这样做的结果是,炮弹方向只受炮筒旋转方向的控制,而我是想如果我在游戏时不旋转炮筒,只旋转坦克,炮筒的指向随着坦克的旋转而改变,这个时候再发射炮弹,炮弹的方向依旧跟炮筒的方向一致你后面提出的想法,我觉得很可行,可是还没理清实现这部分代码的逻辑。试试吧。呵呵 ,还是得谢谢你的帮助,谢谢 谢谢 Kudo Ran和 波导终结者 这两位朋友 我的问题已解决。十分感谢 高手帮帮忙 启动一个线程时的参数 接下来怎么写,关于网站自动注册用户 Guidance Automation是什么东西?怎么用?答对了给100分。 希望学习C#的同行们能够走在一起,一起学习~~~~~快~~ 关于C#.NET调试问题?? C#多窗口应用中打开一个visio,然后能够从MSMQ的队列中读取一个消息 (急!!!!!求源代码 12小时内结贴) release后的exe或dll还能看到原来的代码是怎么写的吗? 一个小问题!送分! 请各位DD推荐一款基于C#的快速开发应用框架 WebBrowser.url C# winform程序 怎么制作图例?
看来是我描述问题的能力不行,打个比方吧,游戏运行后,坦克的初始化方向朝向南方,这个时候我发射炮弹,炮弹的方向是朝南方发射,随意转动炮筒,炮弹的方向也跟炮筒的方向一致,但是如果在初始化后,我把坦克的方向朝向东方,而不是南方,这是发射炮弹,炮弹的发射方向依旧是指向南方,如果这时再转动炮筒,那么炮筒方向和炮弹方向就会有一个角度差。
不知我这样描述,是不是可以让你理解清楚
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用来记录炮筒的左右旋转值,
这样做的结果是,炮弹方向只受炮筒旋转方向的控制,而我是想如果我在游戏时不旋转炮筒,只旋转坦克,炮筒的指向随着坦克的旋转而改变,这个时候再发射炮弹,炮弹的方向依旧跟炮筒的方向一致你后面提出的想法,我觉得很可行,可是还没理清实现这部分代码的逻辑。试试吧。呵呵 ,还是得谢谢你的帮助,谢谢