Несколько объектов в массиве сплайсинга, когда происходит столкновение аварии - PullRequest
0 голосов
/ 06 ноября 2018

В настоящее время я работаю над основной игрой html и javascript и столкнулся с дилеммой. Когда мои пули (которые хранятся в виде массива) сталкиваются с myObstacles (также хранятся в виде массива), иногда препятствие, с которым я сталкиваюсь, соединяется, а в других случаях - множественное. Вот мой код столкновения при столкновении

 this.crashWith = function(otherobj) {
    var myleft = this.x;
    var myright = this.x + (this.width);
    var mytop = this.y;
    var mybottom = this.y + (this.height);
    var otherleft = otherobj.x;
    var otherright = otherobj.x + (otherobj.width);
    var othertop = otherobj.y;
    var otherbottom = otherobj.y + (otherobj.height);
    var crash = true;
    if ((mybottom < othertop) || (mytop > otherbottom) || (myright < 
    otherleft) || (myleft > otherright)) {
        crash = false;
      }
      return crash;
      }

Вот как я соединяю препятствие, когда пуля поражает врага

   for (y = 0; y < myObstacles.length; y += 1) {
        if (myGamePiece.crashWith(myObstacles[y])) {
            var ctx = myGameArea.context;
            ctx.fillText("Game Over", 150, 150);
            myGameArea.stop();

       } 

    for (i = 0; i < bullets.length; i += 1) {

      if(myObstacles[y].crashWith(bullets[i])) {
       myObstacles.splice(myObstacles[y], 1);

   }
 }
}

Была бы очень признательна за помощь.

Чтобы увидеть полный код, я сделал github репозиторий

1 Ответ

0 голосов
/ 06 ноября 2018

Array.splice() удалить заданное количество элементов, начиная с заданного индекса, и все остальные элементы сдвигаются вниз. Затем блок запоздалой мысли цикла for увеличивается на i на 1. Таким образом, индекс пропускается.

Взгляните на этот отрезанный:

    let fiboArray  = [ 1, 1, 2, 3, 5, 8 ];
    
    // Lets say we want to remove all 1 of fiboArray
    // Array.splice() fails in forward for loop
    for (let i = 0; i <= fiboArray.length ; i++) {
        if (fiboArray[i] === 1) {
            fiboArray.splice(i, 1);
        }
    }
    console.log(fiboArray); 
    // → [ 1, 2, 3, 5, 8 ] but expected was [ 2, 3, 5, 8]
    // Thats because the remaining elements shift down
    
    let fiboArray2  = [ 1, 1, 2, 3, 5, 8 ];
    
    // Array.splice() with backward for loop
    for (let i = fiboArray2.length - 1; i >= 0; i--) {
        if (fiboArray2[i] === 1) {
            fiboArray2.splice(i, 1);
        }
    }
    console.log(fiboArray2); 
    // → [ 2, 3, 5, 8 ]

    // Or decrement `i` in a forward for-loop after call `splice(i--, 1)`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...