2012-05-01 9 views
0

weirrrrd problem私はここにいます。私は敵の視界を実現しました。そのため、プレイヤーが検出可能なエリア(前方120度のコーン)を移動すると、FOVの外に出るまで、悪い人に追われます。FOVテストでは、プレイヤーがinfront AND behindを検出しています

問題は、敵の背中からも出てくる120FOVのコーンがあるので、2つのコーンを前面に1つ、後ろに1つ、前面に1つ使用したいだけです。私が考えることができるのは、私が渡されたPIをあふれさせているということだけですか?私は本当にわからない。

このチュートリアルでは、ベクトル演算を使用してこれを実装しました。ドットプロダクトセクション。 http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-2/

ここにFOVに関するコードがあります。

Vector2 EnemyVecAngle = new Vector2((float)Math.Cos(EnemyAnimation.Angle), (float)Math.Sin(EnemyAnimation.Angle)); 

     //normalize 
     Vector2 EnemyFacingN = Vector2.Normalize(EnemyVecAngle); 
     Vector2 EnemytoPlayer = Vector2.Normalize(player.Position - Position); 

     //check angle 
     float CheckAngle = (float)Math.Acos(Vector2.Dot(EnemyFacingN, EnemytoPlayer)); 

if ((CheckAngle >= 60) && (CheckAngle <= 120) 
following = true; 

これはtehのプレイヤーに向けた敵の顔は、かつて私はそれを動作させるために-PI/2を追加する必要がある理由私は思ったんだけど

EnemyAnimation.Angle = (float)Math.PI/-2 + (float)Math.Atan2(Position.Y - player.Position.Y, Position.X - player.Position.X); 

を検出し、私はこれができると思いますステートメントです問題に関連している。どんな助けでも大歓迎です!

答えて

1

私は、Math.PI/-2を追加すると90度のテクスチャを回転させると思います。

あなたはATAN2を使用する必要があります。

Vector2 EnemyVecAngle = new Vector2((float)Math.Cos(EnemyAnimation.Angle), (float)Math.Sin(EnemyAnimation.Angle)); 

    //normalize 
    Vector2 EnemyFacingN = Vector2.Normalize(EnemyVecAngle); 
    Vector2 EnemytoPlayer = Vector2.Normalize(player.Position - Position); 

    //check angle 
    float CheckAngle = (float) (Math.Atan2(EnemyFacingN.Y, EnemyFacingN.X) 
           - Math.Atan2(EnemytoPlayer.Y, EnemytoPlayer.X)); 

それは十分なはずそれを使用すると、adecuateを選択する新しい計算角度を検査しますけれども... Atant2が直角サイン... の世話をします範囲...

関連する問題