Posts mit dem Label A* werden angezeigt. Alle Posts anzeigen
Posts mit dem Label A* werden angezeigt. Alle Posts anzeigen

Freitag, 18. November 2011

Das Radarsystem oder Wer hat Performance so brutal erschossen?


Mein Radarsystem ist dazu gedacht dass die Gegner mich (natürlich den Helden) nur dann angereiffen wenn ich in Sichtweite und in Reichweite bin.

Dazu habe ich ein ähnliches System gebaut wie bei der Pfadfindung. nur mit dem Unterschied dass keine h-Kosten entstehen(kosten bis zum Ziel). Somit wird im Kreis gesucht. Ich habe ein abbruchkriterium eingebaut das eintritt sobald eine Wand zwischen dem Endziel und dem Suchenden befindet.


Zwischendurch hatte ich allerdings ein kleines Stocken. Also habe ich einen Framecounter eingebaut. Dann kahm die Frage auf wieso dass der Framecounter nicht richtig Funktionierte???




Als ich dann die CPU auslastung anschaute wars dann klar dass er doch funktioniert...

Offt findet man den killer irgendwo versteckt. So wie es sich am Schluss herausstellte hat sich dieser aber gut gezeigt. Es lag einfach an allem... Der Berechnung, der Speicherung, dem Zeichnen...

So habe ich bis zu schluss alles umgebaut und Performance liebt mich wieder so wie früher :D





Erweiterung von A*


Ich habe meine A* Pfadfindung mit einer kleinen Schönheitskorektur erweitert. Ich habe alle Nodes eliminiert die nicht eine zwingende Richtungsänderung erfordern. Dadurch erhalten die beweglichen Figuren eine glattere Verlaufslinie.

Standard A*



Glattere Bewegung:



Die grünen Punkte sind die Nodes die ich direkt ansteuere.

Im Moment wird nur eine Linie beachtet. Es wird aber so Implementiert dass die ganze Fülle des Objekts beachtet wird. So wirds auch mit der Collision Detection was :-)

Diese Änderung bedeutet allerdings eine erhöhte Rechnerei beim erstellen des Pfades, da auf einer Geraden zwischen den 2 Tiles immer überprüft werden muss ob diese Gerade ein Unwalkable Tile berührt...

First steps mit Pathfinding

Wird mal zeit was zum Gamedesign zu sagen.

Ich bin gerade dabei im Bereich Gamedesign mit XNA ein wenig herum zu experimentieren.

Am schluss sollte ein 2D Space Shooter entstehen (allerdings auf Planeten und nicht wirklich im Weltall... Wird sich aber noch genauer zeigen...).

Da ich allerdings nicht über alles den Überblick behalten kann / will (was auch immer...) teste ich das ganze zerst Modular. Wenn die einzelnen Module richtig funzen werde ich diese in die Engine (Die Wicked GenEngin ;)) einbauen.

In diesem Teil möchte ich zeigen wie ich die Pfadfindung gemacht habe.

Zum starten habe ich mir mal überlegt wie das gehen muss damit eine Einheit iht Ziel finden kann. Das habe ich dann ziemlich aufwändig ausprogrammiert und getestet. Das Problem bei der Lösung war dass ich immer fast die ganze Map bis zum Ziel abgesucht habe.

Darauf hin habe ich mich im Internet schlau gemacht und hab mich in das magische A* eingelesen. Da wurde mein Fehler rasch sichtbar, da ich keine histerie + keine Kosten benutzt habe. Somit hatte ich so eine art Radar... (werde ich wahrscheinlich später auch noch benutzen können :D)
Somit habe ich meine Lösung zu einer A* umgebaut.

Als erstes braucht man eine Welt. Bei mir ists eine einfache Tile based map.



Bei jedem Spiel braucht man einen Helden.


Das Ziel ist


Der abgesuchte Pfad


Der definitive Pfad



So wird immer der kürzeste Pfad gesucht (halt A*).

Jetzt bin ich noch dran dass Nodes eliminiert werden bei denen keine umbedingte Richtungsänderung vorgenommen werden muss. So wird der Pfad viel schöner und direkter. Das ist aber nur möglich da die Bewegung meiner Figuren nicht auf die MapTiles begrenzt ist...

 Zu den nächsten Themen werde ich meine Pixel Collision Detection mit rotierenden Objekten aufzeigen und vieleicht noch was zu meinem Map generator. Vieleicht kommt sogar bald mal ein kleines Video B)