Deutsch
Forum

Findpath vollkommen nutzlos?

 
hallo frank,

sry das ich es so hart formuliere aber wenn ich solche pfade erhalte...

...kann ich nichts anderes mehr sagen! ich hab wirklich den eindruck das die funktion mit einem zufallsgenerator arbeitet!

wie du vielleicht schon gemerkt hast programmiere ich gerade ein kleines spiel in profan mit deiner dll,deswegen schreibe ich hier so viel

ich hab bis jetzt ausschließlich voller anspannung auf diesen moment hinprogrammiert in dem die sprites sich das erste mal autonom durch den hintergrund bewegen, umso größer war meine enttäuschung als ich die ersten ergebnisse sah...

in 50% aller fälle ist der pfad vollkommen hirnrissig,man hat echt den eindruck die sprites wären betrunken und torkeln am ziel vorbei!
in weiteren 25% wird garkein pfad gefunden obwohl einer da ist und die pixelbreite des weges auch schon auf 1 ist...
die restlichen 25% prozent wären vielleicht noch akzeptabel,sind aber immernoch weit vom ideal entfernt.

ohne diese (vernüftig funktionierende) funktion ist mein spiel leider zum scheitern verurteilt! selber programmieren kann man sowas auch nicht da getpixel zulangsam arbeitet!
 
24.04.2004  
 



Hallo,

sry das ich es so hart formuliere aber wenn ich solche pfade erhalte...
...kann ich nichts anderes mehr sagen! ich hab wirklich den eindruck das die funktion mit einem zufallsgenerator arbeitet!

Natürlich ist ein kleines Quäntchen Zufall mit im Spiel...
Deine beiden Beispiele kranken aber daran, das überhaupt kein Weg gefunden werden muß, weil er nirgendwo verspeert ist...
Dafür ist FindPath auch nicht ausgelegt. Die Funktion arbeitet immer besser, je schlimmer der direkte Weg verstellt ist.
Arbeite viele Wände ein, dann merkst du es.

Nochmal zu deinen Beispielen: In dem Wegsuche Demo habe ich darauf verzichtet, zunächst den direkten Weg zu suchen, warum ein Demo unnötig kompliziert machen ?

wie du vielleicht schon gemerkt hast programmiere ich gerade ein kleines spiel in profan mit deiner dll,deswegen schreibe ich hier so viel
ich hab bis jetzt ausschließlich voller anspannung auf diesen moment hinprogrammiert in dem die sprites sich das erste mal autonom durch den hintergrund bewegen, umso größer war meine enttäuschung als ich die ersten ergebnisse sah...
in 50% aller fälle ist der pfad vollkommen hirnrissig,man hat echt den eindruck die sprites wären betrunken und torkeln am ziel vorbei!
in weiteren 25% wird garkein pfad gefunden obwohl einer da ist und die pixelbreite des weges auch schon auf 1 ist...
die restlichen 25% prozent wären vielleicht noch akzeptabel,sind aber immernoch weit vom ideal entfernt.
ohne diese (vernüftig funktionierende) funktion ist mein spiel leider zum scheitern verurteilt! selber programmieren kann man sowas auch nicht da getpixel zulangsam arbeitet!

Auszug aus der Anleitung:
Sinnvolle Werte für W gehen von 6 bis 48. Werte von 1-5 sind zu klein...

Nimm den Wert 12.

Ein paar Tips von mir:

- wenn du eine feste Landschaft zusammen mit Sprites nutzt, dann benutze besser MoveSpriteWithTable(), siehe auch die Ballersprite Demos
- baue Zusatzwände in die Maske ein, die der User ja nicht sieht, die das Sprite aber dazu veranlassen kann, einen optimalen Weg zu suchen
- bearbeite die Pathdaten mit SmoothPath(path#,anzahl&,4), das beseitigt das Torkeln.

So, noch was.
Eine FindPath Funktion ist nicht einfach zu realisieren, auch kann sie nicht auf alle Situationen angewendet werden.
Der Schwachpunkt von FindPath() sind in der Tat große Flächen ohne Mauern. In deinem Fall würde ich zuerst versuchen direkt zum Zielpunkt zu gelangen.
Wenn das nicht ging (du kannst ja abfragen, ob sich das Sprite nicht mehr bewegt und den Zielpunkt schon erreicht hat) startest du FindPath().

Ich hoffe, das hilft schon etwas.

Gruß, Frank
 
24.04.2004  
 



habs nochmal ausführlich mit hindernissen getestet, ergebnis sieht nicht sehr viel besser aus...

die letzten 2 beispiele demonstrieren die problematik von findpath ganz gut.
die funktion versucht erst auf einer achse auf die höhe zu kommen und dann sich auf der anderen achse dem ziel zu nähern.
vom direktweg ist da keine spur zu sehen!

wie wäre es wenn du als orentierung immer den direktweg nimmst und versuchst immer auf diesen weg zu bleiben bzw. wieder dahin zu kommen wenn der weg versperrt ist?
würde um einiges besser sein als zu versuchen über die achsen zum ziel zu kommen..
 
24.04.2004  
 



Hallo,

Die letzten 2 beispiele demonstrieren die problematik von findpath ganz gut.
die funktion versucht erst auf einer achse auf die höhe zu kommen und dann sich auf der anderen achse dem ziel zu nähern.

Falsch vermutet !
Die Funktion teilt die Grafik in ein einfarbiges Mosaikbild auf, je größer der Wert in W, je grober das Mosaik...
Innerhalb dieses Bilds wird mittels eines Füllmechanismus (Wave-Marble) versucht, zum Ziel zu gelangen, wobei jede Station des Füllens in einer Tabelle vermerkt wird.
Wurde ein Weg gefunden, dann wird diese Tabelle optimiert, indem Schleifen (also Punkte) die doppelt durchlaufen wurden, entfernt werden. Dieser halboptimierte Path ist der, den FindPath() berechnet.
Um jetzt den KÜRZESTEN Weg zu finden, müßte ich ausgehend von allen Punkten der Tabelle untereinander eine Linienberechnung (Bresenham z.B.) durchführen (also direkt zum Ziel laufen).
Dann hätte ich tatsächlich immer den kürzestzen Weg gefunden, aber absolut auf Kosten der Geschwindigkeit. Mal abgesehen vom Aufwand.
Das würde sogar in Assembler den Rahmen sprengen
Vielleich mache ich diesen Zusatz ja mal mit einer Option verfügbar. Momentan aber wohl nicht.

vom direktweg ist da keine spur zu sehen!

Hab ich ja nie behauptet. Das müßtest du in deinen Programm halt zuerst versuchen, direkt zum Ziel zu gelangen. Wenn das nicht klappt, läßt du dann FindPath laufen.

Gruß, Frank
 
24.04.2004  
 



ok,sah so aus als ob du es so gemacht hättest.
würde mir ja evtl.auch noch selbst was basteln aber mit getpixel kann man ja nicht arbeiten so langsam wie das ist.
kann man da evtl.mit einem array das schneller abfragen?

würde mich freuen wenn du die funktion doch noch verbessern würdest,weil im jetzigen zustand ist ja quasi unbracuhbar...
 
24.04.2004  
 



Hallo,

beschreib deine Idee doch mal näher, was genau möchtest du denn machen?
Meinst du nicht, du bist mit festen Pfaden besser bedient ?

Gruß, Frank
 
24.04.2004  
 



moin,

suche eigentlich nur einen ersatz für getpixel!
dann kann ich mir selbst was programmieren(hoffentlich). irgendwie hast du es ja schon schneller hingekriegt weil bei backgroundcollision fragst du ja auch ein bitmap-array ab.
es reicht vollkommen wenn die funktion nur 0 oder 1 zurückgibt!
 
24.04.2004  
 



Hi,

nein, dort wird tatsächlich GetPixel() verwendet...
Nimm die API Version, ist schneller als Profans GetPixel.
Aber glaub mir, eine FindPath-Funktion zu machen ist alles andere als einfach... Aber probiers halt.

Gruß, Frank
 
24.04.2004  
 



ich wollte ja garkeine findpath funktion machen(gott bewahre),sondern es quasi on-the-way abfragen:
das bild bewegt sich auf direktem weg zur zielposition,wenn es jetzt auf ein hinderniss trifft entscheide ich wo lang das bild gehen soll: oben/unten-links/rechts
bei backgroundcollision gibt es ja nur die möglichkeit das bild abprallen zu lassen und nicht wenn möglich vorbei laufen zulassen.
aber wie wäre es hier mit einem neuen flag? wenn das flag gesetzt ist wird automatisch mit findpath ein weg um das hinderniss herum gesucht(dürfte dann ja eigentlich nicht solche unsinnigen pfade erzeugen,oder?). es soll also nur der punkt(der auf der breseham linieliegt) direkt hinterdem hinderniss angesteuert werden...
 
24.04.2004  
 



Hi,

schöne Idee. Aber um diesen Punkt zu erkennen, müßten trotzdem alle möglichen direkten Wege gecheckt werden

Na, ich werde demnächst nochmal versuchen FindPath() weiter zu optimieren.

Gruß, Frank
 
24.04.2004  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.529 Betrachtungen

Unbenanntvor 0 min.
Helmut17.07.2018
H.Hackl13.01.2015
Peter Max Müller19.08.2013

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

unbekannt (10x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie