删除选中前数组中的所有元素

All elements in array before selected being deleted

可能只是一些愚蠢的东西,但我正在 p5.js 重写 Galaga 用于大学作业,并且在开始时我正在消灭敌人。当一颗子弹发射并击中屏幕上的第三个敌人时,它之前的所有敌人都会被摧毁。

敌人数组只是一个简单的数组,敌人对象被推入其中:enemies = [];

敌人的销毁函数是

this.die = function() {
    enemies.splice(enemies[this.index], 1);
}

循环是

for( var b = 0; b < player.bullets.length; b++) {
    for(var i = 0; i < enemies.length; i++) {
        var bullet = player.bullets[b];
        if(collision(bullet.x, enemies[i].x, bullet.y, enemies[i].y, 20, 55, 40, 55)) {
            enemies[i].die();
        }
    }
}

任何帮助都会很棒

splice的参数是删除top的起始索引(第一个元素)和元素个数。

所以声明

enemies.splice(enemies[this.index], 1);

似乎完全不正确。可能是声明

enemies.splice(this.index, 1);

会做你想做的,如果 this.index 是数组中敌人的索引。但如果你从数组中删除了一个先前安排的敌人,情况就不会这样了。

我建议做 enemies.splice(i, 1); 而不是 enemies[i].die();:

for( var b = 0; b < player.bullets.length; b++) {
    for(var i = 0; i < enemies.length; i++) {
        var bullet = player.bullets[b];
        if(collision(bullet.x, enemies[i].x, bullet.y, enemies[i].y, 20, 55, 40, 55)) {
            enemies.splice(i, 1);
        }
    }
}

注意,从列表中删除一个元素后,必须更新以下元素的属性 .index