我试图将最接近的对象的值返回到函数中的位置。

我尝试将实体放入数组中,然后尝试使用for循环将最接近的对象返回到我的位置,但是它不起作用。我怎样才能做到这一点?

function getMyEntity() {
  return Game.currentGame.world.localPlayer.entity.getFromTick();
}

function getOtherEntity() {
  var MyPlayerEntity = getMyEntity();

  var entities = Game.currentGame.world.entities;
  for (var uid in entities) {
    // how i get closest entity to my player entity here?
    var gameObject = entities[uid].fromTick;

    console.log(entities[uid].fromTick.position, MyPlayerEntity.position)
    if (gameObject.entityClass == "Prop" && gameObject.uid !== MyPlayerEntity.uid) {
      return gameObject;
    }
  }
}

function aimAssist() {
  var MyPlayerEntity = getMyEntity();
  var OtherEntity = getOtherEntity();
  if (OtherEntity == undefined) return

  var aimPosition = {
    x: OtherEntity.position.x - MyPlayerEntity.position.x,
    y: OtherEntity.position.y - MyPlayerEntity.position.y
  }
  return aimPosition;
}

最佳答案

我会给你一个不好的建议,因为它会随着O(n ^ 2)的复杂性而发展,随着您的游戏的发展,它会变得很糟糕。阅读有关四叉树的知识,看看是否可以这样做。同时您可以比较欧几里得距离,不需要取平方根:

Object.keys(entities)
.map(function(d,i){
  var dx = entities[d].fromTick.position.x - MyPlayerEntity.position.x,
       dy = entities[d].fromTick.position.y - MyPlayerEntity.position.y,
       result = {D:(dx * dx) + (dy + dy), obj:entities[d] , valueOf: function(){return this.D};
  return result;
}).sort(function(a,b){
    return a-b;
})[0].obj; //this returns the closest one


因此,您的原始功能变为:

function getOtherEntity() {
  var MyPlayerEntity = getMyEntity();

  var entities = Game.currentGame.world.entities;
  return Object.keys(entities)
    .map(function(d,i){
      var dx = entities[d].fromTick.position.x - MyPlayerEntity.position.x,
           dy = entities[d].fromTick.position.y - MyPlayerEntity.position.y,
           result = {D:(dx * dx) + (dy + dy), obj:entities[d] , valueOf: function(){return this.D};
      return result;
    }).sort(function(a,b){
        return a-b;
    })[0].obj; //this returns the closest one
}

关于javascript - JavaScript:函数返回最接近的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54723172/

10-12 12:38