我目前正在使用 XNA 4.0 做一个小型回合制大炮游戏。游戏非常简单:玩家选择他想要发射火箭的速度和角度,以击中另一个玩家。还有一个随机生成的风矢量会影响火箭的 X 轨迹。我想添加一个 AI,以便玩家可以在单人游戏模式下与电脑对战。
我希望实现 AI 的方式非常简单:找到让火箭直接击中玩家的速度和角度,然后在这些字段中添加随机修改器,这样 AI 就不会每次都击中其他玩家。
这是我用来更新火箭位置和速度的代码:
Vector2 gravity = new Vector2(0, (float)400); // 400 is the sweet spot value that i have found works best for the gravity
Vector2 totalAcceleration = gravity + _terrain.WindDirection;
float deltaT = (float)gameTime.ElapsedGameTime.TotalSeconds; // Elapsed time since last update() call
foreach (Rocket rocket in _instantiatedRocketList)
{
rocket.RocketSpeed += Vector2.Multiply(gravity, deltaT); // Only changes the Y component
rocket.RocketSpeed += Vector2.Multiply(_terrain.WindDirection, deltaT); // Only changes the X component
rocket.RocketPosition += Vector2.Multiply(rocket.RocketSpeed, deltaT) + Vector2.Multiply(totalAcceleration, (float)0.5) * deltaT * deltaT;
// We update the angle of the rocket accordingly
rocket.RocketAngle = (float)Math.Atan2(rocket.RocketSpeed.X, -rocket.RocketSpeed.Y);
rocket.CreateSmokeParticles(3);
}
我知道找到最终 X 和 Y 坐标的基本方程是:
X = V0 * cos(theta) * totalFlightTime
Y = V0 * sin(theta) * totalFlightTime - 0.5 * g * totalFlightTime^2
其中 X 和 Y 是我要击中的玩家的坐标,V0 是初始速度,theta 是发射火箭的角度,totalFlightTime 顾名思义,就是火箭到达它之前的总飞行时间(X , Y) 和 g 是重力(在我的游戏中是 400)。
问题:
我遇到的问题是知道在这些公式中添加风的位置(是否只是在 X = 方程中添加“+ windDirection * totalFlightTime”?),以及如何处理这些方程以执行我的操作想要做(找到初始速度和θ角),因为有3个变量(V0,θ和totalFlightTime)并且只有2个方程?
谢谢你的时间。