我想在XNA游戏中实现弹道轨迹,并试图找出使射弹遵循引力曲线的最佳方法.
我能想到的最好的事情就是首先计算曲线并存储在"曲线"类中.然后让精灵沿着那条曲线移动.
但我无法弄清楚如何沿着该曲线实际移动精灵.
我该怎么做,还是只有更好的方法?
基本上你想要使用你的高中物理运动方程(维基百科文章).
对于抛射运动,这是一个重要的等式:
s = s? + v?t + ½at²
Run Code Online (Sandbox Code Playgroud)
(位移等于:初始位移,加上初始速度乘以时间,加上半加速度乘以时间平方.)
假设你有一个在2D中移动的抛射物.你基本上为每个维度运行这个等式.在X方向上,您将具有初始位置和一些初始速度但没有加速度.
在Y方向上,您将获得初始位置,初始速度和由于重力引起的向下加速度.
所有你需要做的就是跟踪你的射弹被射击后的时间,并在你计算的位置绘制你的精灵.
这是一些粗略的XNA代码 - 你可以看到我可以一次计算两个轴:
Vector2 initialPosition = Vector2.Zero;
Vector2 initialVelocity = new Vector2(10, 10); // Choose values that work for you
Vector2 acceleration = new Vector2(0, -9.8f);
float time = 0;
Vector2 position = Vector2.Zero; // Use this when drawing your sprite
public override void Update(GameTime gameTime)
{
time += (float)gameTime.ElapsedGameTime.TotalSeconds;
position = initialPosition + initialVelocity * time
+ 0.5f * acceleration * time * time;
}
Run Code Online (Sandbox Code Playgroud)
使用一个小代数,你可以使用相同的运动方程来做一些事情,比如计算发射弹丸的速度来击中特定点.