0

私はHTML5ゲームに取り組んでおり、数学の問題だと思うものがあります。プレイヤーと敵のオブジェクトには、画面上のどこにいるかを示すpos.xとpos.yの値があります。一部の敵に近接チェックコードを実装しましたが、完全に満足しているわけではありません。現在、敵はプレイヤーが敵から一定の距離内にあるかどうかをチェックしています。x軸とy軸で200または-200です。これが意味するのは、エンティティがそれ自体の周りの400x400の正方形をスキャンしているということです。

代わりに、これを半径200の円にします。現状の私のコード。

if ((player.pos.x - enemy.pos.x > 200 && player.pos.x - enemy.pos.x < 200) 
  && (player.pos.y - enemy.pos.y > 200 && player.pos.y - enemy.pos.y < 200)) {
    //Do something...
}

あなたがそれをチェックしたいなら、これが私のゲームです。近接敵は2番目で現在最後のレベルにあります:)

http://project.dnsalias.com/

4

2 に答える 2

3

それは非常に基本的な数学です。

(x 1 -x 02 +(y 1 -y 02 <r2であることを確認します

function inRange(p0, p1, r) {
   r = r || 200;
   var dx = p0.x - p1.x;
   var dy = p0.y - p1.y;

   return (dx * dx + dy * dy) < (r * r);
}

そのように呼んでください:

if (inRange(player.pos, enemy.pos)) { 
    ...
}

3番目のオプションの引数を指定して、検出半径を変更できます。

于 2012-05-23T17:17:06.360 に答える
1

おそらく、代わりにユークリッド距離関数を使用できますか?これは、(player.pos.x-enemy.pos.x)x(player.pos.x-enemy.pos.x)+(player.pos.y-enemy.pos.y)x(player。 pos.y --enemy.pos.y)= 200x200。申し訳ありませんが、平方根関数と平方関数の構文がわかりません。

于 2012-05-23T17:22:32.787 に答える