Как вы удаляете элементы из массива, используя методы в игре с боковым скроллером? - PullRequest
0 голосов
/ 25 апреля 2020

Я делаю игру с птичками, в которой игрок должен собрать все слова из массива. Прямо сейчас я использую метод shift () для удаления элементов, как показано ниже:

if ( bX + bird.width >= words[i].x 
        && bX + bird.width <= words[i].x + 40
        && bY+bird.height >= words[i].y
        && bY+bird.height <= words[i].y + 40){

        words.shift();
    };

Для справки приведем массив:

var nouns = ["dog", "boy", "house","farm", "phone", "plane", "doctor"];
var words = [];
for (var i = 0; i < 20; i++) {  
    words.push(new word(i * 161 + 200, Math.floor(Math.random() * (400 - 10 + 1)) + 10, nouns[i])); }

Однако, если игрок пропускает первый элемент массива («собака»), после чего он не может захватить любой из оставшихся элементов массива. Как я могу это исправить, чтобы игрок мог получить доступ к элементам массива в любом порядке?

'picture here, note shift() only works if the first element of the array (dog) is selected first.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Вы уже используете переменную i в обнаружении столкновений. Вы используете его для выбора проверяемого слова.

С другой стороны, если бы вы использовали words.shift(), который всегда удаляет первое слово массива.

Это может работайте, пока ваша птица всегда находится в крайнем левом положении и все слова имеют разумное расстояние по оси x.

Но если вы хотите сделать это более широко, вы можете проверить все возможные слова в al oop и удалить все, что попало или вышло из экрана.

Существует несколько способов удалить элемент из массива. Например, вы можете использовать words.splice(i, 1) для удаления words[i]. Если вы используете это в виде, имейте в виду, что все последующие индексы изменились на 1.

for (let i = 0; i < words.length; ++i) {
    if (birdCollidesWithWord(words[i]) || wordWentOutOfScreen(words[i])) {
        words.splice(i, 1);
        i -= 1;
    }
}
0 голосов
/ 26 апреля 2020
    if (words[i].x <= 0){
        words.shift();

    }

Я ввел этот код до того, как мой код обнаружения столкновения. Это позволило пропустить первый элемент массива и просто сместить этот элемент, тем самым удалив первый элемент массива и позволив игроку продолжить сбор других элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...