我在代码中遇到了一些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);
答案 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
作业发生?