Я следовал 3DBuzz XNA AI учебному пособию, и оно использует векторы для вычисления направлений объекта.У меня проблемы с пониманием простого куска кода, который перемещает объект в заданном направлении (видео 3DBuzz действительно не углубляются в векторную математику).
Немного фона
Система ИИ использует классы актеров, которым вы можете назначить поведение.Поведения имеют заданное свойство веса, определяющее, какое количество поведения учитывается при работе с несколькими поведениями.Ниже приведено поведение для перемещения объекта в постоянном направлении.Это метод обновления, который постоянно вызывается.
public override void Update(Actor actor)
{
actor.Direction += this.direction * this.Weight;
}
Чего я не понимаю, так это , почему мой объект движется в постоянном направлении, в то время как переменная Направление актера увеличивается с этим направлением в каждом кадре?1015 * Сначала я думал, что это потому, что вектор Направления нормализуется при каждом обновлении в классе 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;
Я не понимаю, почему я 'm движется в одном направлении, в то время как мой вектор направления каждый раз отличается.Кто-нибудь может мне это объяснить?