XNA矢量数学:代码说明(不同的Vector2D,屏幕上的相同运动)

时间:2012-03-28 18:00:11

标签: c# vector xna

我遵循了3DBuzz's XNA AI教程,它使用向量来计算对象方向。我无法理解在给定方向上移动对象的简单代码(3DBuzz视频并没有真正深入到向量数学中)。

有点背景

AI系统使用Actor类,您可以分配行为。行为具有设置权重属性,用于定义在处理多个行为时会考虑多少行为。下面是一个沿恒定方向移动对象的行为。这是更新方法,不断被调用。

 public override void Update(Actor actor)
 {
     actor.Direction += this.direction * this.Weight;
 }

我不明白的是,为什么我的对象在一个恒定的方向上移动,而Actor的Direction变量每帧都以该方向递增?

最初我认为这是因为Direction向量在Actor类中的每次更新时都是标准化的,但是当在规范化之前和之后记录我的方向时,它们都是不同的。这是我的输出(Trace.WriteLine):

DIR: {X:0.7071068 Y:0.7071068}
NOR: {X:0.7071068 Y:0.7071068}
DIR: {X:2 Y:2.537759E-27}
NOR: {X:1 Y:1.268879E-27}
DIR: {X:0.7071068 Y:0.7071068}
NOR: {X:0.7071068 Y:0.7071068}
DIR: {X:2 Y:1.268879E-27}
NOR: {X:1 Y:6.344397E-28}
DIR: {X:0.7071068 Y:0.7071068}
NOR: {X:0.7071068 Y:0.7071068}
DIR: {X:2 Y:6.344397E-28}
NOR: {X:1 Y:3.172199E-28}
DIR: {X:0.7071068 Y:0.7071068}
NOR: {X:0.7071068 Y:0.7071068}
DIR: {X:2 Y:3.172199E-28}
NOR: {X:1 Y:1.586099E-28}
DIR: {X:0.7071068 Y:0.7071068}
NOR: {X:0.7071068 Y:0.7071068}
DIR: {X:2 Y:1.586099E-28}
NOR: {X:1 Y:7.930497E-29}
DIR: {X:0.7071068 Y:0.7071068}
NOR: {X:0.7071068 Y:0.7071068}

获取此输出的代码(在Actor.cs中):

        Trace.WriteLine("DIR: " + this.Direction);

        if (this.Direction.Length() > 0f)
            this.Direction.Normalize();

        Trace.WriteLine("NOR: " + this.Direction);

        if(IsMoving)
            this.Position += this.Direction * this.Speed;

我不明白为什么每次我的方向矢量不同时我都朝同一个方向移动。任何人都可以向我解释这个吗?

1 个答案:

答案 0 :(得分:1)

enter image description here

正如您所看到的,您正在添加向量和规范化,并且您正在向正在添加的向量进行近似...此处效果会被行为向量方向的模块放大...使用较小的向量将花费更多的周期来使它成熟。