for循环在解析数组时无法正常工作

时间:2015-01-30 12:46:54

标签: javascript arrays for-loop

我在代码中遇到了一些for循环的问题。 它必须解析包含3个对象的数组,并在条件合适时移动它们。但只检测到并移动了第一个对象,从未检测到其他2个。我不明白为什么,因为我做了其他类似的方法,我从来没有遇到任何问题。

这是方法,我知道这很难理解,但问题在于检测到的'box'对象始终是数组的第一个,而不是第二个或第三个。

Player.prototype.move = function(direction) {

  for (var i = 0; i < boxArray.length; i++) {
    var box = boxArray[i];

    // Enregistrement de la position dans le tableau d'undo/redo
    this.index++;
    var array = [this.x, this.y, this.id];
    this.undoArray.push(array);
    // Définition de la direction de déplacement 
    if (direction == 'RIGHT') {
        this.moveCoeff = 1;
        this.moveLength = 1;
    }
    else if (direction == 'LEFT') {
        this.moveCoeff = -1;
        this.moveLength = 1;
    }
    else if (direction == 'TOP') {
        this.moveCoeff = -1;
        this.moveLength = 11;
    }
    else if (direction == 'BOTTOM') {
        this.moveCoeff = 1;
        this.moveLength = 11;
    }

    // Si box à côté et pas de collision possible 
    if ((controller.left || controller.right || controller.top || controller.bottom) && 
        box.id == this.id + (this.moveLength * this.moveCoeff) && 
        currentLevel[this.id + (this.moveLength * 2 * this.moveCoeff)] != 1 && 
        currentLevel[this.id + (this.moveLength * 2 * this.moveCoeff)] != 2) {
        // Décalage de la position du player 
        if (direction == 'RIGHT' || direction == 'LEFT') this.x += this.boxWidth * this.moveCoeff;
        else this.y += this.boxWidth * this.moveCoeff;
        this.id += this.moveLength * this.moveCoeff;
        currentLevel[this.id] = 8;
        currentLevel[this.id - (this.moveLength * this.moveCoeff)] = 0;
        // Décalage de la position de la box            
        if (direction == 'RIGHT' || direction == 'LEFT') box.x += this.boxWidth * this.moveCoeff; 
        else box.y += this.boxWidth * this.moveCoeff; 
        box.id += this.moveLength * this.moveCoeff;
        currentLevel[this.id + (this.moveLength * this.moveCoeff)] = 2;
    }
    // Sinon si aucun objet à côté 
    else if ((controller.left || controller.right || controller.top || controller.bottom) && 
        (currentLevel[this.id + (this.moveLength * this.moveCoeff)] == 0 || 
        currentLevel[this.id + (this.moveLength * this.moveCoeff)] == 3)) {
        // Décalage de la position du player
        if (direction == 'RIGHT' || direction == 'LEFT') this.x += this.boxWidth * this.moveCoeff;
        else this.y += this.boxWidth * this.moveCoeff;
        this.id += this.moveLength * this.moveCoeff;
        currentLevel[this.id] = 8;
        // Décalage de la position du sol
        currentLevel[this.id - (this.moveLength * this.moveCoeff)] = 0;
    }
    // Fin du déplacement
    controller.right = false; 
    controller.left = false; 
    controller.top = false; 
    controller.bottom = false; 
  }
}

这是我在数组中推送对象的部分(在循环中):

var box = new Box();
box.id = i;
boxArray.push(box);

1 个答案:

答案 0 :(得分:0)

for循环的底部,您说:

controller.right = false; 
controller.left = false; 
controller.top = false; 
controller.bottom = false; 

然而,你的两个条件都始于:

if ((controller.left || controller.right || controller.top || controller.bottom) && 

else if ((controller.left || controller.right || controller.top || controller.bottom) && 

在第一次循环之后,永远不会,所以不会采取任何行动。

在循环之后,您是否意味着所有controller.XXX = false作业发生