bearbeiten verketten: Aus Gründen der Einfachheit halber betrachten folgenden Code:Werte innerhalb wenn Bedingung
var z = {x: 1, y: 1};
console.log(z.x+5 + ' ' + z.y+5);
Warum ausgegeben (6,15) anstelle von (6,6)?
Vor edit: Ich habe folgende Funktion:
function findPath(startX, startY, goalX, goalY){
var queue = [],
candidates = [],
path = [];
queue.push({x: startX, y: startY, searchDistance: 0, hasBeenSearched: true});
fillQueue();
function fillQueue(){
setInnerHTML(queue[0].x, queue[0].y, '.');
for(var i=-1; i<=1; i++){
if(queue[0].x + i < 0 || queue[0].x + i > boardHeight - 1){
continue;
}
for(var j=-1; j<=1; j++){
if(queue[0].y + j < 0 || queue[0].y + j > boardWidth - 1){
continue;
}
if(i == 0 && j == 0){
continue;
}
if(cells[queue[0].x + i][queue[0].y + j].type.blockMovement == true || findCell(queue[0].x + i, queue[0].y + j).hasBeenSearched == true){
console.log(queue[0].x + i + ' ' + queue[0].y + j)
continue;
}
if((queue[0].x + i == goalX) && (queue[0].y + j == goalY)){
setInnerHTML(queue[0].x + i, queue[0].y + j, '.');
candidates.push(queue[0]);
candidates.push({x: queue[0].x + i, y: queue[0].y + j, searchDistance: queue[0].searchDistance + 1, hasBeenSearched: true});
//fillPath();
return path;
}
queue.push({x: queue[0].x + i, y: queue[0].y + j, searchDistance: queue[0].searchDistance + 1, hasBeenSearched: true});
}
}
candidates.push(queue.shift());
if(queue.length > 0){
setTimeout(fillQueue, 0);
}else{
return 'no path found';
}
function findCell(x,y){
for(var i=0; i<queue.length; i++){
if(queue[i].x == x && queue[i].y == y){
return queue[i];
}else if(i == queue.length - 1 && (queue[i].x != x || queue[i].y != y)){
return {hasBeenSearched: false};
}
}
}
}
}
Es ist Teil der Wegfindung Algorithmus Ich habe in letzter Zeit Umschreiben und ich habe folgendes Problem. Innerhalb der inneren for-Schleife, wenn diese Bedingung findCell(queue[0].x + i, queue[0].y + j).hasBeenSearched == true
geprüft wird, werden die Werte des zweiten Parameters queue[0].y
und j
verkettet, anstatt nur hinzugefügt zu werden, während die gleiche Bedingung für den ersten Parameter korrekt funktioniert (Werte werden hinzugefügt). Ich versuche das jetzt für einige Stunden herauszufinden und ich habe keine Ahnung, was hier vor sich geht. Die beiden Werte queue[0].y
und j
sind Zahlen (ich habe sie mit der Konsolenprotokollierung typeof
überprüft) und sollte genau wie ähnliche Werte im ersten Parameter hinzugefügt werden. Jede Hilfe mit dem Hinweis, was ich falsch gemacht habe, wird geschätzt. Vielen Dank im Voraus.
Codepen Link: http://codepen.io/Furmanus/pen/LkXVwO/?editors=0011
Es war nicht genau die Antwort, die ich erwartet hatte, aber es ist eine gute und richtige Antwort - ich habe nur eine falsche Frage gestellt. Der Code war in der Tat kaputt und es war an einem Ort kaputt, den ich nicht erwartet hatte - jedenfalls habe ich noch etwas Neues gelernt! Also danke für die Antwort :) – Furman