PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : So etwas wie eine KI in einem AKS



Karl
12.07.2009, 03:45
Ich zerbech mir gerade den Kopf (und oh mein Gott ich sollte schon lange im Bett liegen) über KI in einem AKS. Nach konsultation der Suchfunktion (die niederträchtigerweise "KI" als Suchbegriff ausschließt) habe ich was über neurologe Netze, Pixelberechnungen und Abstandausrechnung mithilfe des Pythagoras gefunden. Das alles zermatscht mir das Gehirn.
Deshalb frage ich euch: Gibts es halbwegs einfache und überschaubare Möglichkeiten Gegnern in einem AKS ein halbwegs sinnvolles Verhalten zu geben?
Bis jetzt habe ich nichts weiter als "Follow Hero", stehende Gegner die Schießen und Kopfschmerzen.
So ich geh jetzt ins Bett und heute wenn ich aufstehe wird alles besser aussehen :)

Kelven
12.07.2009, 09:41
Gab es in den SNES-Spielen denn bessere KIs? Wenn ich mich noch richtig erinnere, hatten die Gegner dort auch nur die Möglichkeiten "Auf den Helden zu" oder "wahllos laufen". Ich will darauf hinaus, dass eine bessere KI eigentlich gar nicht notwendig ist, zumindest bei einem Action-Kampfsystem. Mit "Step toward hero" bleibt der Gegner zwar schnell hinter einem Hindernis hängen, aber gerade diese Unvollkommenheit ist vielleicht sogar notwendig, sonst wäre das Spiel zu schwer.

Supermike
12.07.2009, 12:31
Eine KI ist eigentlich nur ein Ziel das du deinem Viech gibst und er dieses einfach verfolgt. Also wenn dein Viech einfach dem Helden nachlaufen soll, hat es, so gesehen, schon eine KI. Sinnvolle KI? Einfach das Ziel verfolgen und erreichen. Das ist Sinnvoll xD

Also zurück... KI und AKS?
Da reicht wie Kelven schon sagte folgendes: Laufe dumm rum, attackiere Held und evtl. reagieren wenn Held dich attackiert...
Mehr braucht ein normaler gegner in einem AKS eigentlich nicht.
Ausser du möchtest ihn etwas spezieller machen indem du ihm einen zweiten Skill gibst oder er erst ab einer gewissen Distanz reagiert.

Schwieriger wirds bei Bossen die dann eine etwas ausgefeiltere KI's haben.
Die basieren aber meist auch nur aus einem Grundgerüst wie:
Attakiere Held, zieh dich zurück, attackiere Held, nutze Skil, zieh dich zurück, beginne von vorn...

Skizziere dir am besten die Grundhandlung der KI in einem Diagramm.

Kurt_Cobain
12.07.2009, 15:07
Naja sinnvoll wäre es wie gesagt vllt wenn Gegner den Helden erst attackieren wenn dieser in das "Sichtfeld" des Gegners gerät. Das könnte man rein theoretisch dami erreichen das am die Koordinaten des Gegners und des Helden bestimmt und wenn der Held in einen Bereich um den Gegner tritt der 4 oder 5 Schritte vom Gegner entfernt ist wird über ein Parallel Process Event eine andere Eventseite des Gegener aktiviert in der der Gegner sich zum Helden hinbewegt. Ansonsten kann der Gegner sich eigentlich wahllos bewegen.

Karl
12.07.2009, 15:38
Yo, ok. Aber das von Kelven erwähnte festhängen nervt mich dennoch.
Kann man da was machen?

Supermike
12.07.2009, 16:25
Ich hab das Problem bisher selber (noch) nicht lösen können.
Afaik benutzen manche ein pathfinding. Wie das funktioniert... kA...

Gibt es nebst der Terrain-ID und/oder den Events noch eine ander Möglichkeit ein unbegehbares Hinderniss zu definieren?

Karl
12.07.2009, 16:32
Variablen gemurkse vielleicht?
Man speichert die Variablen um das eigentlich Objekt und vergleicht sie mti den Variablen des "Gegners" und lässt ihn dann in eine bestimmte Richtung gehehn, natürlich auch noch abhägnig davon wo der Held grade rumhetzt.

~Jack~
12.07.2009, 16:43
Naja, man könnte um jedes Hindernis eins von 2 Feldern hinmappen.
Diese Felder haben jeweils eine unterschiedliche Terrain-ID.
Eine besagt, dass der Gegner hochlaufen soll sobald er drauf steht und die andere, dass er runterlaufen soll. So könnte man das wohl noch am besten kontrollieren.
Würde natürlich das Mapping etwas beschränken, da um Hindernisse herum ja keine andere Art von Feld sein darf, außer du schaffst in jedem Chipset Platz für viele Varianten.

Edit: Okay, natürlich bräuchte man eigentlich 4, für Hindernisse wo der Char seitlich gehen müsste um sie zu umgehen.

Kelven
12.07.2009, 18:27
@Nebary
Das Problem ist, dass aufwändige Pathfinding-Algorithmen einiges an Rechenzeit verschlucken und bei einem AKS wäre es ja sehr unpraktisch, wenn das Spiel eingefroren wird. Ich könnte mir nur eine Möglichkeit vorstellen: Die Gegner müssen wissen, wie sie die Hindernisse auf der Map umgehen können. Das ist nur bei größeren Hindernissen nötig, weil kleinere durch Step toward hero immer umgangen werden. Es gibt also auf jeder Map eine "Lösungsstrategie". Die Koordinaten von Gegner und Held werden verglichen und je nachdem wo beide stehen bewegt sich der Gegner entweder normal durch Step toward hero oder in eine festgelegte Richtung. So wären selbst die gefürchteten U-Hindernisse kein Problem mehr. Der Nachteil dieser Methode ist natürlich, dass du für jede Map die "Lösungsstrategie" neu schreiben müsstest.

Dhan
13.07.2009, 09:30
neurologe Netze
Nee, das ist ECHTE KI, damit erschafft man Computer, die wie menschliche Gehirne arbeiten. Für deine Zwecke unwichtig.

Abstandausrechnung mithilfe des Pythagoras gefunden. Das alles zermatscht mir das Gehirn.
Ohne Phytagoras kommst du nicht weit. Lern den. Und Sinusrechnung dazu (insbesondere was denn nun ein Sinus jetzt tatsächlich für den Raum bedeutet). Das ist die Grundlage aller Manipulation im Raum für die Informatik, Handwerkszeug, das man für trivial halten muss.

So, zum Thema. Ihr habt schon eine Menge zu Hindernisse gesagt und dazu sage ich: Mappt ordentlich, dann ist das egal!
Spielt mal ein paar (kommerzielle) Spiele mit AKS und achtet auf das Mapping. Ihr werdet feststellen, dass da so gut wie nix im Weg steht. Man hat große "Haine" die von Hindernissen eingerahmt sind, in denen jedoch nur ein oder zwei Hindernisse stehen - denkt z.B. an Secret of Mana, die ersten paar Wälder. Da hats mitten auf dem Kampfgrund vielleicht mal so ein oder zwei Felsen aber das wars auch schon.

Für die KI selbst mein Tip: Fang mit einer ganz primitiven KI an. Spiele dein Spiel und schaue, wie DU vorgehst, wie du dich bewegst und nach welchen Regeln du das tust und bring anschließend dem Gegner deine eigenen Bewegungstaktiken bei. Das wiederholst du so oft, bis es deiner Meinung nach fein genug ist.
Und wenn du da ein technisches Problem hast, kannst du ja immer noch im Forum fragen.



Gibt es nebst der Terrain-ID und/oder den Events noch eine ander Möglichkeit ein unbegehbares Hinderniss zu definieren?
Du meinst für NPCs unpassierbar? Klar, erstell nen unsichtbares Event Below Hero und mach nen Häkchen bei "Allow Event overlap"

Alan
23.07.2009, 10:00
Das Erreichen eines bestimmten Zieles unter Berücksichtigung der Umgebung wird als "Pathfinding" bezeichnet. Selbst moderne, kommerzielle Spiele haben da mitunter ihre Probleme, vor allem wenn es in Echtzeit vor sich gehen muss. Lachsen hat einmal auf dem 2k den "A-Star-Algorythm", also den A*-Algorythmus, umgesetzt. Allerdings enorm komplexe Materie und selbst Lachsens Script hat 2-3 Sekunden pro Berechnung gebraucht, was für ein AKS viel zu lange wäre, da müsste der Char schon losrennen, während die Berechnung noch läuft, was früher oder später unweigerlich dazu führen wird, dass der Char einmal den falschen Weg einschlägt. Mit anderen Worten: Schlag' dir das Thema lieber wieder aus dem Kopf ^^'

bluedragon05
23.07.2009, 10:50
Neben Pathfinding gibt es ja zum Glück noch andere Verhaltensmuster, die man versuchen kann dem Gegner beizubringen. Ein gutes Beispiel dafür ist imo die Zelda-Reihe (Ocarina of Time, Majora's Mask usw.). Ich kann mich noch an die Kämpfe gegen diese Wolfsheimer oder wie die hießen erinnern. Immer wenn man sie einfach nur attackierte, haben sie den Angriff des Spielers geblockt. Wenn man dagegen gewartet hat bis der Gegner angriff und dann konterte, hat man meist getroffen.^^
Man könnte also auch versuchen in die KI ein Muster bzw. eine Abfolge von Angriff, Blocken, Kontern und ggf. auch Ausweichen zu integrieren.
Dazu muss man sich im Klaren sein, auf welche Aktion welche Reaktion folgen soll.