2012-04-04 17 views
1

私はすべてを検索し、この一見よくある質問に対する回答を驚くほど見つけられませんでした。私が現在直面している問題は、プレイヤーが敵に直面しているかどうかをチェックし、プレイヤーの視界のどの範囲(調整可能)内であれば、その範囲内であれば最も近い安全方向に移動することです。2つのオブジェクトが互いに向き合っているかどうか確認してください

はここに絵だ:だからD Example

、どのように私はこれを実現するのでしょうか?私はxy、およびdirectionをすべての船体に持っています。これは、プレイヤーの方向がプレーヤーに対して敵の方向から正確に180度離れていると考えようと試みる最後の失敗した試みです。この例では

var direction=Math.direction(this.x,this.y,player.x,player.y,1), 
    playerview=Math.abs(direction)-Math.abs(player.direction-180) 
if(Math.abs(playerview)<10) { 
    console.log('in view') 
    this.xVelocity+=AI.speed*Math.sin(playerview*Math.PI/180) 
    this.xVelocity+=AI.speed*Math.cos(playerview*Math.PI/180) 
    } 

10の範囲であろう。もちろん、私は船を右に回転させることしかできなかったので、半円上での検出だけでなく、敵を右に向けることもできません。何か案は?

答えて

0

コードでthis.yVelocityの代わりにthis.xVelocityを2回修正しています。

Math.directionはJavaScript/ECMA規格にはありません。あなたは確かです、あなたはそれを正しく使用していますか? Math.atan2を検討してください。

また、の定義を「互いに向き合って」にする必要があります。

「お互いを見ている」場合は、あなたの「見えない」あなたのコメントは誤解を招きます。


しかし、主な問題は次のとおりです。

Math.abs(angleInDegrees)は角度を修正!

角度の絶対値を構築するための正しい方法である:

while (angleInDegrees < 0) 
{ 
    angleInDegrees += 360; 
} 

// If necessary, add this too: 
while (angleInDegrees >= 360) 
{ 
    angleInDegrees -= 360; 
} 

-10と350、同一で-10と10は20度離れています。さらに説明するために

、のが(注:巨大な値については、ループは永遠にも非常に長い実行したりするような値が発生する可能性があります場合は、これをチェックする必要があります。。)normalizeAngle

上記のコードを呼ぶことにしましょう

ちなみに

playerview = normalizeAngle(direction - player.direction - 180) 
if (playerview < range || playerview > 360-range) { 


次は、トリックを行う必要があります「playerviewは、」ビューのプレイヤーのフィールドからmininumとenemする必要がありますyの視界。

+0

xVelocityをコピーしていただきありがとうございます。平凡な間違いです^^;しかし、問題は船を動かすことではない、それは正しい検出を得ている。 私はMath.directionが他のすべてのために使用したように動作していると確信しています。私はプロトタイプを自分で追加しました。私はそれが標準ではないことを知っている。 そして、眠気の状態から、私は貧弱にしたい言葉をしました。私が望むのは、含まれている画像の方が優れていることが示されているので、プレイヤーが敵に向かっているかどうかを確認することです。私はそれを達成する方法を知っていますか?あるいは、360度以内に角度を保つためにこの余分な措置が取られても、180を追加することはできますか? – Ruffy

+0

答えを編集して解をスケッチします。 – Black

関連する問題