2017-04-10 50 views
1

我有一个敌方物体的阵列,我想检查x和y位置是否在彼此的10个像素内,并且它们是否将它们移除。我的方法似乎是删除一切,我不知道什么是错的。从彼此范围内的阵列中移除物体

function checkEnemyPos() 
{ 
    for (var i =0; i < enemys.length; i ++) 
    { 
     for (var j =0,len = enemys.length; j <len; j ++) 
     { 
      var xRange = Math.abs(enemys[j].x - enemys[i].x); 
      var yRange = Math.abs(enemys[j].y - enemys[i].y); 


      if (xRange < 10 && yRange < 10) 
      { 
       enemys.splice(j, 1); 
       j--; 
       len--; 
      } 
     } 
    } 
}; 
+1

请添加一些数据和通缉的结果也是如此。 –

+0

这是因为你的for循环是这样的,你可以比较每个敌人以及所有其他的敌人。 – James

+0

btw,第二个循环的开始检查第一个循环的第一个元素。结果是,你删除**所有**项目。 –

回答

1

你可以调整循环,从零到长度外环-1和从i + 1于所述阵列的长度内循环。

举例[0, 1, 2, 3, 4, 5, 6]

0 1 2 3 4 5 i 
1 x      x = check 
2 x x 
3 x x x 
4 x x x x 
5 x x x x x 
6 x x x x x x 
j 
function checkEnemyPos() { 
    for (var i = 0; i < enemys.length - 1; i++) { 
     for (var j = i + 1; j < enemys.length; j++) { 
      var xRange = Math.abs(enemys[j].x - enemys[i].x); 
      var yRange = Math.abs(enemys[j].y - enemys[i].y); 

      if (xRange < 10 && yRange < 10) { 
       enemys.splice(j, 1); 
       j--; 
      } 
     } 
    } 
} 
+1

从零到长度-2,从i + 1到长度-1是你编码的,这是正确的。关键部分是'j = i + 1',其余部分是无关紧要的,因为如果'i == enemys.length - 1',j将在其循环范围之外。 – James