.
|
|
| Autor | Beitrag |
|---|---|
|
050 19.10.2001, 15:28 TheVoice |
-hrhr- naja, wer solchen Mist schreibt ? Ich natürlich :D Logischerweise ist das totaler Schwachsinn um das nur mal klarzustellen! C ya! --Against TCPA | Resourcecode.de | Blender 3D | [ Darkzone | Pandorra | Alpine ] |
|
Profil || Suche |
|
051 19.10.2001, 15:41 hausi |
Lol. Bei mir liegts jetzt in der Signatur... |
|
Profil || Suche |
|
052 19.10.2001, 21:24 gerk |
mann, kan cih vielleicht jetz ne ernshafte antwort bekommen? --„Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ |
|
Profil || Suche |
|
053 19.10.2001, 23:27 TheVoice |
Hast du doch schon! Die KI in SvenCoop ist in keinster Weise modifiziert. Against TCPA | Resourcecode.de | Blender 3D | [ Darkzone | Pandorra | Alpine ] |
|
Profil || Suche |
|
054 21.10.2001, 20:50 gerk |
danke!
genial! -- „Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ |
|
Profil || Suche |
|
055 09.11.2001, 09:24 Jehova-3 |
AyAyAy, ein paar von den Vorschlägen, speziell das mit dem Vis hab ich garnet geschnallt, deswegen hoffe ich einfach mal, daß ich nix altes Vorschlage: Mein Vorschlag wäre einfach das Dijkstra's (Was für ein Zungenbrecher) Verfahren etwas zu erweitern, indem man einfach in einem festgelegtem Gitter z.Bb mit einem Abstand von 10 Feldern nichtsichtbare Wegpunkte anlegt, die einfach zu ihren benachbarten Wegpunkten die kürzeste Strecke inklusive der Ablaufdauer des Weges gespeichert haben , so daß im Prinzip die Pathfindingroutine nur den Weg von der Spielfigur zu den benachbarten Wegpunkten und den Weg vom Zielpunkt zu den benachbarten Wegpunkten direkt berechnen muß, während danach dann der kürzeste Weg zwischen den Wegpunkten berechnet wird, welcher abhängig von den Abständen der Wegpunkte zueinander entweder schneller beim berechnen oder schneller beim ablaufen für die Figur ist, darin läge auch die Skalierbarkeit. Sollte es ein besonders großer Level sein könnte das ganze mit den Wegpunkten noch einige Ebenen weitergführt werden (mit der dementsprechenden Speicherlast). Die größte Schwäche hier dürfte wohl allerdings der Effizienzverlust sein, wenn ein Wegpunkt auf einem nicht erreichbaren Ort liegt und somit im Prinzip einen unendlich hohen Wert für die Ablaufänge liefert, wodurch der ein effizienter Weg knapp am Wegpunkt vorbei evtl ignoriert werden könnte. Das ganze könnte in einer ziemlichen Katastrophe ausarten, wenn mit ein wenig Pech sehr viele Wegpunkte auf nicht erreichbaren Stellen liegen. --Are you gonna miss me ?
|
|
Profil || Suche |
|
056 09.11.2001, 09:27 Jehova-3 |
Und wenn ich scheiße gepostet habe, liegt's am Schlafmangel ;) --Are you gonna miss me ?
|
|
Profil || Suche |
|
057 09.11.2001, 14:35 Prefect |
Nun, für wirklich große Karten wäre es in der Tat nützlich, Metadaten zu speichern, eben so eine Art temporäre Wegpunkte. Ein interessantes Pathfindingverfahren lehnt sich an die Natur an. Und zwar ist es ja so, daß Ameisen auf ihrer Spur irgendwelche Duftstoffe hinterlassen, an denen sich dann andere Ameisen orientieren. Die Duftstoffe verschwinden mit einer konstanten Geschwindigkeit. Die Duftstoffe auf einem langen Weg verschwinden demnach dann eher als solche auf einem kurzen Weg. Allerdings hab ich sowas noch nie in Spielen angewandt gesehen, und wie immer gilt auch hier daß solche Algorithmen zwar vielleicht nett aussehen in irgendwelchen wissenschaftlichen Arbeiten, aber in der Praxis eben doch Probleme mitbringen. Ein gezieltes ablegen von temporären Wegpunkten ist aber sicher dennoch sehr nützlich. Eine andere, sehr kreative, Methode habe ich schon vor einiger Zeit auf einer Webseite beschrieben gesehen. Diese Methode geht aber von einer komplett statischen Karte aus (d.h. keine sprengbaren Brücken, keine abholzbaren Wälder usw.). Dabei wird die Karte in Zonen unterteilt (von einer Art Compiler und so). Die Anzahl der Zonen sollte nicht allzu groß sein (vielleicht 100 oder so). Danach wird für jede Zone eine Kartenebene berechnet in der gespeichert ist, in welche Richtung sich eine Einheit bewegen muß, die diese Zone betreten muß. Dafür braucht man bei 8 Bewegungsrichtungen 4 Bit (man sollte ja so Dinge wie: Ziel nicht erreichbar und Ziel erreicht oder Nahe am Ziel auch speichern können). Dieser Algorithmus müßte natürlich noch mit einem Algorithmus zum Ausweichen von anderen Einheiten und Gebäuden überlagert werden, dann ist er aber bei weitem der Geschwindigkeitseffizienteste. Einziges Problem: Bei einer 10k x 10k-Karte braucht man für jede Ebene 50MB RAM ;) cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
058 11.01.2002, 23:47 CY4N1D3 |
mom... das allererste beispiel bringt mich gerade so auf ne idee... da gibt es doch ne möglichkeit wie man das ganze sauheftig optimieren kann :))) nehmen wir an wir haben nur vierecke. jetzt bildet euch mal beispiel 1 in die köpfe und lass den floddfill krams weg. setzt mal an alle ecken die es gibt nen wegpunkt... also bei alles die folgende muster erfüllen OX XO OW WO so. jetzt dürfte nach meinen wirren vorstellungen jede ecke nen punkt quer gegenüber sein. jetzt kann man das mit dem floodfill wiederholen. aber diesmal werden nur die punkte mit zahlen verbunden die wiederum die zielpunkte sehen können. das dürfte die ganze geschichte um ein vielfaches verschnellert haben. ;) --ob nun delphi, c oder java. kein programm lässt sich mit allen 3en gleichschnell entwickeln. Dieser Beitrag wurde am 11.01.2002 um 23:48 von CY4N1D3 bearbeitet. |
|
Profil || Suche |
|
059 12.01.2002, 13:44 Prefect |
Ich verstehe zwar deine OWX nicht so ganz, aber wenn ich deine Rede richtig interpretiere schlägst du einen Algorithmus vor, bei dem einfach an der Ecke jedes Hindernisses ein Waypoint gesetzt wird. Natürlich ergibt sich dann dadurch ein Graph (also eine Verbindung von Waypoints) zwischen all diesen Waypoints, von dem aus man alle Teile der Map erreichen kann. Das ist in der Tat eine funktionierende Möglichkeit, die hauptsächlich in Situationen verwendet werden kann, bei denen man keine Tilemap hat, sondern einfach eine Menge Hindernisse, die nicht an irgendeinem Gitter ausgerichtet sind (also z.B. ein 3D-Shooter). Aber man könnte das natürlich auch für Tilemaps verwenden - ein kleines bißchen Vorbereitung wäre notwendig, und schon hätte man eine Möglichkeit, lange Distanzen schnell zu überbrücken. Auf gewisse Weise ist das so eine Art Top-Down Pathfinding, wie es ja schon angesprochen wurde. Der genaue Algorithmus würde nämlich so aussehen: Das könnte tatsächlich sehr gut funktionieren. Einziger Haken ist hier (wie bei so vielen anderen Methoden auch): Was soll passieren, wenn die Karte dynamisch ist (z.B. durch abholzbare / wachsende Wälder etc...) cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
060 12.01.2002, 14:49 CY4N1D3 |
richtig. der grösste aufwand bei dem ganzen wird sicherlich sein, dass die waypoints herausfinden müssen welche weiteren waypoints sie erreichen können. nimmst du jetzt beispielsweise ein tile raus hast du in jedem fall min. 2 neue waypoints die sich aus der lücke bilden. wenn du jetzt nur noch für die neuen waypoints herausfindest welche waypoints erreicht werden können dann ist das in der performance kaum zu merken. jetzt kann man vielleicht nicht die karte in berreiche teilen und speichern welche waypoints welche berreiche sehen (bzw. welche berreiche welche waypoints...). das würde heissen das die neu entstandenen waypoints nur noch die punkte abrechnen müssen die in ihrem berreich gespeichert sind. die bereiche solten auch in gewissen zeitabständen neu nachgerechnet werden , da sich bei einer wand die aus bäumen besteht sich einiges ändern kann wenn es diese wand nicht mehr gibt :) da gibt es so einiges was man machen kann. das ist nicht soo das problem. nehmen wir mal an das sich ein feld verschiebt oder auf einmal nicht mehr da ist. --ob nun delphi, c oder java. kein programm lässt sich mit allen 3en gleichschnell entwickeln. |
|
Profil || Suche |
|
061 14.01.2002, 16:55 anothergb02 |
Zu dem 2D-Waypointsystem noch was, es währe wirklich wunderbar, wenn du alternative Wegsystem .... mit einbauen würdest, also meinetwegen, wenn das Objekt an einem Feld (zB Wasser) angekommen ist, dann programmiere das bitte so, dass er per random .. ein von verschiedenen constant bleibende Richtungen einschlägt also in diesem Beispiel zwischen 1;2 und 2 entscheidet (2 bedeutet alternativer Weg, der sich abhängig von der Landschaft automatisch ergeben sollte). x = nicht passierbar 2-1-x [Ziel] ---> ...... da bei spielt es keine Rolle wo der Wegpunkt ist, da er immer wieder neu gesetzt werden kann also, wenn er hängt dann einfach neuen setzten .... 0000011223344555555544332211000000 und so weiter ... Die können ja dann nach einer Weile neu berechnet werden, also wenn eine Einheit nach einem bestimmten Zeitpunkt wieder an der Stelle ankommt und 20 min vergangen sind dann lässt da Objekt den Wert neu berechnen. Also Being in john Malkovich |
|
Profil || Suche |
|
062 14.01.2002, 17:08 CY4N1D3 |
hat aber einen grossen nachteil. wenn du nen grosses C hast und in der mitte stehst kommst du nach meiner lösung schneller ans ziel. ich zeige gleich graphisch was ich meine... --ob nun delphi, c oder java. kein programm lässt sich mit allen 3en gleichschnell entwickeln. Dieser Beitrag wurde am 14.01.2002 um 17:09 von CY4N1D3 bearbeitet. |
|
Profil || Suche |
|
063 14.01.2002, 17:19 anothergb02 |
Es soll ja auch nicht der sinn darin liegen schneller ans Ziel zu kommen, sondern den Feind effektiver zu bekämpfen. --Being in john Malkovich |
|
Profil || Suche |
|
064 14.01.2002, 20:25 CY4N1D3 |
here is comes: (ohne das grosse c ;)) wir haben ein feld voller tiles und natürlich wände (bitte nicht fragen wo die herkommen... die sind einfach da *g*) dann setzen wir hellgrüne punkte an die ecken von allen endpunkten. jetzt wollen wir wissen welche punkte welche punkte sehen können. und welche der startpunkt sehen kann *fg* (das gleiche eigentlich auch für den endpunkt... vergessen) der erste g-punkt (was ein wortspiel) ist überflüssig. der rest läuft nach dem aller ersten prinzip. da das eine schon ziehmlich optimierte lösung ist, kann man diese auch pro zug in echtzeit anwenden. und ich denke man kann es auch mit anothergb02's lösung verknüpfen. man braucht dafür nur lange nicht so viel speicher :) (denk an die 10000x10000 tile's) ;) ob nun delphi, c oder java. kein programm lässt sich mit allen 3en gleichschnell entwickeln. Dieser Beitrag wurde am 14.01.2002 um 20:28 von CY4N1D3 bearbeitet. |
|
Profil || Suche |
|
065 14.01.2002, 23:36 apfelkorn |
Ich hab einen ähnlichen Vorschlag, allerdings braucht der Mapper da nicht die grünen Punkte zu plazieren: Das ganze läuft in wenigen Schritten ab: Dieser Beitrag wurde am 14.01.2002 um 23:37 von apfelkorn bearbeitet. |
|
Profil || Suche |
|
066 15.01.2002, 12:00 CY4N1D3 |
öhm... der mapper braucht diese punkte nicht zu setzen. und ich würde fast annehmen das deine methode sehr rechenaufwändig ist. denk mal an echtzeit und an die 10000x10000 tiles *g* schau einfach mal in welchem muster die grünen punkte gesetzt wurden. is ne super einfache regel. *g* --ob nun delphi, c oder java. kein programm lässt sich mit allen 3en gleichschnell entwickeln. Dieser Beitrag wurde am 15.01.2002 um 12:07 von CY4N1D3 bearbeitet. |
|
Profil || Suche |
|
067 15.01.2002, 15:57 Prefect |
Hmm, Cyanide, hast du davon auch ne lauffähige Demoversion, oder ist das jetzt nur Konzeptgrafik made in Paint? ;) Ich denke, DHCC könnte nen Tutorial über Pathfinding durchaus vertragen... cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
068 15.01.2002, 16:12 CY4N1D3 |
öhm... immo steht das nur in meinem kopf geschrieben... ich könnt da was machen. frage ich nur c oder delphi *GGG* --ob nun delphi, c oder java. kein programm lässt sich mit allen 3en gleichschnell entwickeln. |
|
Profil || Suche |
|
069 15.01.2002, 22:44 Prefect |
Ich gehe mal davon aus, daß C besser ankommt ;p cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
070 15.01.2002, 23:01 anothergb02 |
CY4N1D3 Zu deinem System: Being in john Malkovich |
|
Profil || Suche |
|
071 15.01.2002, 23:11 CY4N1D3 |
war nicht meine idee @anothergb02 *g* -- ob nun delphi, c oder java. kein programm lässt sich mit allen 3en gleichschnell entwickeln. Dieser Beitrag wurde am 15.01.2002 um 23:12 von CY4N1D3 bearbeitet. |
|
Profil || Suche |
|
072 21.01.2002, 18:43 apfelkorn |
aber das problem bei cyanide ist, das man zwar eine verbindung zwischen den einzelnen wegpunkten hat, aber keinen leitfaden wie man von punkt 1 zu punkt 2 kommt... es könnte dann also passieren, dass von punkt blau der computer sich im kreis dreht, immer über die grünen punkte, er braucht aber einen klaren leitfaden, welchen wegpunkt er als nächstes betreten muss, und das ist das problem... --Dieser Beitrag wurde am 21.01.2002 um 18:44 von apfelkorn bearbeitet. |
|
Profil || Suche |
|
073 22.01.2002, 11:42 CY4N1D3 |
??? das versteh ich nun garnicht ! der computer würde sich nach meinem beispiel GARNICHT bewegen, würde es keinen weg zum ziel geben ! und die punkte werden ja nach dem system #1 verbunden. das ist nur pathfinding. was der gegner tut wenn er keinen direkten weg zum feind findet is ja ihm überlassen. es dürfte aber keinen punkt in der map geben die kein wegpunkt sehen kann. es kann nur sein das manche wegpunkte sich nicht erreichen können. beispiel ein senkrechter strich durch die map. bei einer map ohne hindernisse gibt es keine wegpunkte. aber eich keine hindernisse, so das der feind direct zum gegner laufen kann ;) und alle probleme die du mit dieser pathfindign variante hast, hast du mit jeder anderen auch. nur kannst du diese ohne grossartige performance probleme ändern (anderen weg berechnen und co.) :) wie gesagt. du kommst an jeden erreichbaren punkt der map in jedem fall. nur ist es vielleicht komplizierter zu sagen: wenn weg nicht existiert dann mach dir einen. wie beispielsweise bäume fällen (warcraft). die 2 transporter auf der brücke ist nachwie vor nen lustiges beispiel das eintreten kann. wenn man gegnerische einbeiten die einen selber nicht bekämpfen können und die man auch nicht angreifen kann dann kann man diese ja als potenzielle hindernisse betrachten. für einen transproter sind alle einheiten potenzielle hindernisse. (ausser menschen, die kann man überfahren *g*) gibt es noch ein beispiel dieser art ? --ob nun delphi, c oder java. kein programm lässt sich mit allen 3en gleichschnell entwickeln. |
|
Profil || Suche |
|
074 22.01.2002, 18:24 apfelkorn |
cyanide... ich meine das problem da ist, das du auch einen leitfaden brauchst, welcher punkt als nächster angesteuert werden soll... du weißt zwar, das der nie gegen eine wand laufen wird, aber wenn der jetzt mehrere wegpunkte zur auswahl hat, welchen wird er dann nehmen? das ist ja noch nicht bekannt... -- |
|
Profil || Suche |
|







