Huhu leute,
vllt könnt ihr mir ja helfen. irgendwie blicke ich nicht ganz bei dem script durch. snippets.galaxy-news.de/javascript:a_-algorithmus hab mir die prototype js besorgt und wollte einfach mal den weg ausgeben lassen. nur stellt sich die frage wie? startSearch() startet das ganze ja... nur woher krieg ich die pfade? also von anfang bis ende? krieg das nich gebacken
A* in JS aus der Snippet DB
gepostet vor 16 Jahre, 9 Monate von DarkPrisma
gepostet vor 16 Jahre, 9 Monate von Fornax
Args.. ungültiger verweis!
Also das wird in der closedList gespeichert, ich hab eben mal n script dazu geschrieben (ich weiß, die tabelle übern string zu bauen ist nicht sonderlich schön, aber ich habe noch nie mit prototype gearbeitet, nur mit mootools und wollte mir jetzt nicht angucken wie/ob es in prototype anderst ist):
Also das wird in der closedList gespeichert, ich hab eben mal n script dazu geschrieben (ich weiß, die tabelle übern string zu bauen ist nicht sonderlich schön, aber ich habe noch nie mit prototype gearbeitet, nur mit mootools und wollte mir jetzt nicht angucken wie/ob es in prototype anderst ist):
"http://www.w3.org/TR/html4/loose.dtd">
test
test
here should be the map
gepostet vor 16 Jahre, 9 Monate von blum
Im Prinzip gehst du den weg vom Ziel zum Start zurück.
Das heisst, wenn du das Ziel gefunden hast, läufst du alle parents durch, bis du wieder am startpunkt bist.
Siehe "this.parent = parent;" im Konstruktor.
Das heisst, wenn du das Ziel gefunden hast, läufst du alle parents durch, bis du wieder am startpunkt bist.
Siehe "this.parent = parent;" im Konstruktor.
gepostet vor 16 Jahre, 9 Monate von Fornax
Das Forum hasst mich heute... Schonwieder ein ungültiger Verweis!
Kurz und schmerzlos:
1) Danke für den Hinweis mit .parent
2) Der Algorithmus ist fehlerhaft (er zeigt nicht den kürzesten Weg, bitte um Rückmeldung von Drezil (war doch von dir, oder?)) =>
3) Ich hab ne kleine Erweiterung, zum .parent suchen:
function showParent(){
var node = myParent.parent;
console.log(node);
var el = $('y_'+node.y+'_x_'+node.x);
el.setStyle({background: 'green'});
myParent = node;
}
In der "DOMContentLoaded"-Funktion "var e = startSearch();" mit "var e = myParent = startSearch();" ersetzen, natürlich noch eine Aufrufmöglichkeit dafür: "parent
"
Kurz und schmerzlos:
1) Danke für den Hinweis mit .parent
2) Der Algorithmus ist fehlerhaft (er zeigt nicht den kürzesten Weg, bitte um Rückmeldung von Drezil (war doch von dir, oder?)) =>
3) Ich hab ne kleine Erweiterung, zum .parent suchen:
var myParent;
function showParent(){
var node = myParent.parent;
console.log(node);
var el = $('y_'+node.y+'_x_'+node.x);
el.setStyle({background: 'green'});
myParent = node;
}
In der "DOMContentLoaded"-Funktion "var e = startSearch();" mit "var e = myParent = startSearch();" ersetzen, natürlich noch eine Aufrufmöglichkeit dafür: "parent
"
gepostet vor 16 Jahre, 9 Monate von Drezil
nee.. war nicht von mir .. ich hab den A* noch nie implementieren müssen ..
gepostet vor 16 Jahre, 9 Monate von blum
Ich weiss nicht, wo du die funktion "showParent" aufrufst.
Aber du darfst erst den Weg zurückgehen, wenn du wirklich am Ziel bist.
Sonst bekommst du falsche Ergebnisse, weil A* mit Vermutungen arbeitet.
Aber du darfst erst den Weg zurückgehen, wenn du wirklich am Ziel bist.
Sonst bekommst du falsche Ergebnisse, weil A* mit Vermutungen arbeitet.
gepostet vor 16 Jahre, 9 Monate von Fornax
meine Funktion showParent wird erst aufgerufen, nachdem er den Weg berechnet hat; Anhand des Elementes das bei startSearch zurückgegeben wird.
gepostet vor 16 Jahre, 9 Monate von DarkPrisma
Hallo Leute,
danke schonmal für eure Mühen. Ich werde mir das ganze am Wochenende mal in ruhe angucken. Mal schaun wie weit ich komme, danke für die bisherige hilfe und auch für die weitere
Edit: kruz mal reingeguckt. so 100% gehts ja nicht *g* aber sieht schon gut aus. nur der soll nicht diagonal laufen sondern nur oben, unten, links oder rechts
danke schonmal für eure Mühen. Ich werde mir das ganze am Wochenende mal in ruhe angucken. Mal schaun wie weit ich komme, danke für die bisherige hilfe und auch für die weitere
Edit: kruz mal reingeguckt. so 100% gehts ja nicht *g* aber sieht schon gut aus. nur der soll nicht diagonal laufen sondern nur oben, unten, links oder rechts
gepostet vor 16 Jahre, 9 Monate von knalli
Alternativ de.wikipedia.org/wiki/A*#Funktionsweise zur Brust nehmen; musst es ja nur in Javascript übersetzen.
gepostet vor 16 Jahre, 9 Monate von Todi42
Original von DarkPrisma
Edit: kruz mal reingeguckt. so 100% gehts ja nicht *g* aber sieht schon gut aus. nur der soll nicht diagonal laufen sondern nur oben, unten, links oder rechts
Irgendwo wird es eine Schleife über alle Nachbarfelder geben, dort must Du dafür sorgen, dass die Diagonalen keine Nachbarn sind.