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...
}

这是我的游戏,如果你想看看的话。接近的敌人在第二个也是目前最后一个级别:)

http://project.dnsalias.com/

4

2 回答 2

3

这是非常基础的数学。

检查 (x 1 - x 0 ) 2 + (y 1 - y 0 ) 2 < r 2

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)) { 
    ...
}

您可以提供第三个可选参数来更改检测半径。

于 2012-05-23T17:17:06.360 回答
1

也许您可以改用欧几里得距离函数?这将类似于 (player.pos.x - 敌人.pos.x) x (player.pos.x - 敌人.pos.x) + (player.pos.y - 敌人.pos.y) x (player.pos.x) pos.y -enemy.pos.y) = 200 x 200。抱歉,我不知道平方根和平方函数的语法。

于 2012-05-23T17:22:32.787 回答