XNA 3D 抛物线的算法 请各位大虾们,帮帮忙:我现在在用XNA编写一个3D坦克的游戏,可是在坦克发射炮弹问题上遇到了瓶颈,现在坦克可以发射炮弹,但是炮弹的运动轨迹是一条直线,我想让它运行抛物线的形式。不知道这个算法该如何写。在此求教给位了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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); } void UpdateMissiles() { foreach (GameObject missile in missiles) { if (missile.alive) { missile.position += missile.velocity; if (missile.position.Z < -1500.0f) { missile.alive = false; // update the calculation range = calculateRange(); height = calculateHeight(); time = calculateTime(); } } } }这是我的发射炮弹的代码,请问我应该怎么修改呢?谢谢…… 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(); } } } } 想要模拟更真实的物理效果应该看下《Beginning Math and Physics for Game Programmers》或者你可以用box2d引擎 box2d for xnahttp://www.box2d.org/links.html 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();} 楼上的伪代码是 dy +=gravity. 手误打错 老鸟进来分析下,菜鸟进来学习下 想用C#做个管理系统,求教下关于用户权限控制(我没有多少分……不知道怎么能够弄到分……) C# winform 自带水晶报表自定义纸型问题 datagrid格式化问题 WEB用户控件引用的问题 连续点击按钮使每次文本框都显示不同的内容 ?? C#控制 usb接口的斑马条码机(p330i) 再问,数据上传的问题(webservice),很着急啊 紧急求救!刷新页面后不执行Page_Load函数 C# 实现通过Http 以Post方式提交数据的问题 求一个解决办法 同学们、前辈们好。我有一个问题求助是关于C#导入C++生成的DLL的
{
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); }
void UpdateMissiles()
{
foreach (GameObject missile in missiles)
{
if (missile.alive)
{
missile.position += missile.velocity; if (missile.position.Z < -1500.0f)
{
missile.alive = false; // update the calculation
range = calculateRange();
height = calculateHeight();
time = calculateTime(); }
}
}
}
这是我的发射炮弹的代码,请问我应该怎么修改呢?谢谢……
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(); }
}
}
}
或者你可以用box2d引擎
另外抛物线这种东西学过初中物理应该知道水平速度保持不变,处置速度根据加速度增大就好。检测到碰撞物体就爆炸即可
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();
}