XNA Vector math: объяснение кода (другой Vector2D, то же движение на экране) - PullRequest
0 голосов
/ 28 марта 2012

Я следовал 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 движется в одном направлении, в то время как мой вектор направления каждый раз отличается.Кто-нибудь может мне это объяснить?

1 Ответ

1 голос
/ 29 марта 2012

enter image description here

Как видите, вы добавляете векторы и нормализуетесь, и вы аппроксимируете добавляемый вектор .... здесь эффект усиливается модулем направления вектора поведения ... с меньшим вектором воля занимает больше циклов, чтобы приблизить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...