我有一个敌对对象数组,我想检查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,将内部循环从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--;
            }
        }
    }
}

09-19 18:38