我刚开始在XNA中使用3D编码,我正试图解决一些问题。
我与XNA的目标是制作一个太空模拟游戏(原创,我知道)我能够绘制模型,我的相机正在按照我喜欢的方式工作,我遇到麻烦的地方是了解如何移动我的敌舰。我已经在2d中使用转向行为做了一些值得,但不是3d。
我的问题是:
如果我试图让船只“寻找”一个位置,这种运动如何影响船舶的世界矩阵(如果有的话)?我正在使用vector3s,并将加速度添加到速度,然后将速度添加到位置。这是正确的方法吗?
我现在不需要发帖,或者我愿意,我只是想了解采取什么方法。
由于
答案 0 :(得分:4)
为您的对象/实体/船舶提供一个位置(Vector3)和旋转(Matrix),然后您可以使用以下代码(以及此答案底部的示例)来移动船只。
例如,将船只向前移动5个单位:
Entity myShip = new Entity();
myShip.GoForward(5.0f);
使您的船舶滚动90度
myShip.Roll(MathHelper.PiOver2);
以下是示例代码
public class Entity
{
Vector3 position = Vector3.Zero;
Matrix rotation = Matrix.Identity;
public void Yaw(float amount)
{
this.rotation *= Matrix.CreateFromAxisAngle(this.rotation.Up, amount);
}
public void YawAroundWorldUp(float amount)
{
this.rotation *= Matrix.CreateRotationY(amount);
}
public void Pitch(float amount)
{
this.rotation *= Matrix.CreateFromAxisAngle(this.rotation.Right, amount);
}
public void Roll(float amount)
{
this.rotation *= Matrix.CreateFromAxisAngle(this.rotation.Forward, amount);
}
public void Strafe(float amount)
{
this.position += this.rotation.Right * amount;
}
public void GoForward(float amount)
{
this.position += this.rotation.Forward * amount;
}
public void Jump(float amount)
{
this.position += this.rotation.Up * amount;
}
public void Rise(float amount)
{
this.position += Vector3.Up * amount;
}
}