XNA世界空间和物体运动

时间:2011-11-21 21:05:28

标签: c# xna

我刚开始在XNA中使用3D编码,我正试图解决一些问题。

我与XNA的目标是制作一个太空模拟游戏(原创,我知道)我能够绘制模型,我的相机正在按照我喜欢的方式工作,我遇到麻烦的地方是了解如何移动我的敌舰。我已经在2d中使用转向行为做了一些值得,但不是3d。

我的问题是:

如果我试图让船只“寻找”一个位置,这种运动如何影响船舶的世界矩阵(如果有的话)?我正在使用vector3s,并将加速度添加到速度,然后将速度添加到位置。这是正确的方法吗?

我现在不需要发帖,或者我愿意,我只是想了解采取什么方法。

由于

1 个答案:

答案 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;
    }
}