2012-03-28 7 views
0

私は3DBuzz's XNA AIチュートリアルに続き、オブジェクト方向の計算にベクトルを使用しています。 3DBuzzのビデオは実際にはベクトル計算に深く関わっていません)。XNAベクトルの数学:コードの説明(別のVector2D、同じ動きの画面上)

背景

のビットAIシステムは、あなたが行動を割り当てることができ俳優クラスを使用しています。ビヘイビアには、複数のビヘイビアを扱うときにどのくらいのビヘイビアが考慮されるかを定義する重みプロパティが設定されています。以下はオブジェクトを一定の方向に動かす動作です。これは更新メソッドであり、継続的に呼び出されます。

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

私は理解していない事が俳優の方向変数はその方向で各フレームをインクリメントしながらがなぜ一定の方向に私のオブジェクトの移動を行い、ありますか?

最初はDirectionベクトルがActorクラスの各更新で正規化されていたのだが、正規化の前後に自分の方向を記録すると、両方の違いがあると思った。私はに動いてる、なぜ私は理解していない

 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; 

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)であります私の方向ベクトルは毎回異なっていますが、同じ方向です。誰も私にこれを説明することはできますか?ここであなたが見ることができるように、あなたはベクトルと正規化を追加している、とあなたが追加されているベクターにaproximatingさ

+0

2つのアクターオブジェクトがあるようです。 1つは右を指す方向を使用し、もう1つは右と下を指す方向を使用している。 11方向が示されています。その間にフレームはどのように実行されますか? –

+0

これもあります。0に設定されています。 –

答えて

1

enter image description here

....効果が動作ベクトル方向のモジュールによって拡大され..より小さなベクトルでは、それに近づくためにより多くのサイクルがかかるでしょう。

+0

ありがとう!あまりにも遅く、画像を作成していただきありがとうございます。本当に助かりました! – Nick