Все элементы в массиве перед выделением удаляются - PullRequest
1 голос
/ 23 сентября 2019

Возможно, просто что-то глупое, но я переписываю Галагу в p5.js для университетского задания и в начале я уничтожаю врагов.Когда пуля стреляет и поражает, скажем, третьего врага на экране, все враги, прежде чем она будет уничтожена.

Массив врагов - это простой массив, в который толкаются вражеские объекты: 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();
        }
    }
}

Любая помощь будет отличной

1 Ответ

0 голосов
/ 23 сентября 2019

Параметрами splice являются начальный индекс (первый элемент), который должен быть удален сверху, и количество элементов.

Так что утверждение

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 следующих элементов.

...