为什么这个数组的最后一个元素是拼接而不是中间元素?

时间:2018-03-18 18:30:45

标签: javascript arrays loops array-splice

出于某种原因,当试图从数组中拼接中间索引时,敌人会删除最后一个元素。我问了几个人,但他们不知道问题是什么。

如果我向第5个敌人射击子弹,则阵列的最后一个元素拼接而不是索引5.

enemies.forEach(function(element, index){
    for(var i = 0; i < bullets.length; i++) {
        if(bullets[i].X + 5 > element.X && bullets[i].X < element.X+30 && 
            bullets[i].Y + 5 > element.Y && bullets[i].Y < element.Y+30){
            //These conditions look messy but they work

            console.log(index); //This Outputs the Correct Index
            enemies.splice(index, 1); //<- Splices The Last Index instead of a specific one

            bullets.splice(i, 1); 
        }
    }
})

此链接包含我的整个代码的副本以及此功能的备用版本 https://pastebin.com/Q7swAh1a

  1. 为什么没有拼接正确的索引?
  2. 如何修复此代码以拼接正确的索引?

1 个答案:

答案 0 :(得分:0)

你的问题在这里:

$TV.Power.On()
#Outputs
Set-Power -action on -IPAddress 127.0.0.1 -auth AuthKey123

$TV.IPAddress = "10.0.0.1"
$TV.Power.On()
#Outputs
Set-Power -action on -IPAddress 10.0.0.1 -auth AuthKey123

在这里

for(var i = 0; i < enemies.length; i++) {
    enemies[i].Draw((66*i)+18, 50, i);//Here is the bug
    enemies[i].Move();
}

你根据阵列中的索引而不是自己的位置来绘制敌人。

这应该有效:

this.Draw = function(x, y, i) {
    this.X = x;//These 2 lines overwrite the real positions
    this.Y = y;

    ctx.fillStyle = 'orange';
    ctx.fillRect(this.X, this.Y, 30, 30);
    ctx.fillStyle = 'white';
    ctx.fillText(i, this.X, this.Y);
}