Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-07-2010, 14:16   #1 (permalink)
ING
whatever
 
Registriert seit: May 2008
Beiträge: 419
[AS3] a* Wegfindung

hab das kürzlich anhand der wiki seite nachgebaut und bin begeistert wie gut das funktioniert ist allerdings nur die halbe miete, dazu wird noch ein knoten system benötigt was sich aber jeder selbst, nach den eigenen bedürfnissen, erstellen sollte. die knoten klasse (hier PathNode) muss folgende eigenschaften und methoden besitzen:
  • d : Number = der aktuelle wert des knotens (wird nur zum zwischenspeichern benötigt)
  • p : PathNode = der vorige wegpunkt des knotens (wird nur zum zwischenspeichern benötigt)
  • connected : Array = ein array mit den knoten die mit diesem knoten verbunden sind (ein Vector.<PathNode> macht sich natürlich auch gut)
  • distance(otherNode) : Number = eine methode die die distanz zwischen dem aktuellen und dem angegebenen knoten zurück gibt.

ActionScript:
  1. public function aStar(_start:PathNode, _target:PathNode) : Boolean {
  2.     var openList:Array = [], closedList:Array = [];
  3.     var current:PathNode, successor:PathNode;
  4.     var exist:Boolean, value:Number;
  5.  
  6.     openList.push(_start);
  7.     _start.d = 0;
  8.    
  9.     while (openList.length) {
  10.         openList.sortOn("d", Array.NUMERIC);
  11.         current = PathNode(openList.shift());
  12.        
  13.         if (current == _target) return true;
  14.        
  15.         for each (successor in current.connected) {
  16.             if (closedList.indexOf(successor) > -1) continue;
  17.            
  18.             value = current.d + current.distance(successor) + successor.distance(_target);
  19.             exist = openList.indexOf(successor) > -1;
  20.            
  21.             if (exist && value > successor.d) continue;
  22.            
  23.             successor.p = current;
  24.             successor.d = value;
  25.            
  26.             if (!exist) openList.push(successor);
  27.         }
  28.        
  29.         closedList.push(current);
  30.     }
  31.    
  32.     return false;
  33. }
findet die funktion einen pfad gibt sie true zurück, sonst false. der pfad kann dann rekonstruiert werden in dem man vom letzten knoten die p eigenschaften bis zum start abläuft. hier eine hilfsfunktion dazu...

ActionScript:
  1. // gibt ein array aus den wegpunkten zurück, beginnend bei _start
  2. public function findPath(_start:PathNode, _target:PathNode) : Array {
  3.     var node:PathNode, result:Array = [];
  4.    
  5.     if (aStar(_start, _target)) {
  6.         node = _target;
  7.         while (node != _start) {
  8.             result.push(node);
  9.             node = node.p;
  10.         }
  11.         result.push(_start);
  12.         result.reverse();
  13.     }
  14.    
  15.     return result;
  16. }
anbei noch ein screenshot und eine beispielanwendung, ihr könnt beliebig hindernisse auf die bühne zeichnen. die reine performace der wegfindung ist noch etwas schneller, in dem beispiel muss jedesmal noch die map neu berechnet werden, bei einer statischen karte fällt dieser schritt natürlich weg.
.
Angehängte Grafiken
Dateityp: gif Clipboard11.gif (40,6 KB, 55x aufgerufen)
Angehängte Dateien
Dateityp: swf CorePath.swf (6,1 KB, 83x aufgerufen)

Geändert von ING (26-07-2010 um 14:25 Uhr)
ING ist offline   Mit Zitat antworten
Alt 26-07-2010, 14:44   #2 (permalink)
Neuer User
 
Registriert seit: Mar 2010
Beiträge: 146
das ist cool
könnte mir echt weiter helfen
DennisG ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Wegfindung Tiles, direkter Weg? Kenji Flash 8 3 24-09-2008 16:31
Nodebasierende Wegfindung [RK] ActionScript 2 7 30-03-2007 17:58
Wegfindung readme.txt Spielkonzepte und Spieleprogrammierung 12 03-11-2006 10:58


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:09 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele