





























Godot stellt zwei Methoden bereit, zwei Punkte in einem Labyrinth, auf den kürzesten Weg zu verbinden. Zum einen erfolgt dies über den Node Navigation2D und zum anderen über das Objekt Astar welches einen eigenen Artikel füllt.
unterhalb dieses Nodes benötigen wir noch ein Node NavigatonPolygonInstance. In diesem zweiten Node wird mit Hilfe des 2D-Editors ein Polygon erstellt, welches das Labyrinth abbildet. Dieses Polygon beschreibt die Fläche der möglichen Wege. Jedoch ist dieses nur während des Editierens sichtbar. Zur Laufzeit der Anwendung benötigen wir an dessen Stelle ein sichtbares Objekt, beispielsweise ein Sprite mit einer Wegkarte als Bild(Texture).
Sowie im Panel(Szene) das Node NavigatonPolygonInstance selektiert ist, sind im 2D-Editor folgende Buttons, in der Menüleiste zusätzlich anwählbar:
Neues Polygon einfügen
Polygon editieren
Punkte löschen
Nach dieser Erstellung benötigen wir noch eine Start- und Ziel-Position. Die folgende Skriptzeile liefert ein Array aus Vector2 welches den Weg über die entsprechenden Koordinaten beinhaltet.
var weg = get_simple_path(start, ende, false)
Die Start- beziehungsweise die End-Position sollten innerhalb des Polygones liegen, ansonsten findet die Berechnung an der direkt anliegenden Position innerhalb des Polygons an.
weg[0] enthält die Startposition, weswegen dieses Wertepaar beim Abgehen des Weges eigentlich nicht gebraucht wird.
Der dritte Parameter(Boolean) der Funktion get_simple_path bedeutet:
Das Node Navigation2D kann auch in Verbindung mit TileMap angewendet werden. Die TileMap muss ein Zweig des Navigation2D sein.
Die Kacheln welche einen Weg darstellen sollen, müssen ein Node NavigatonPolygonInstance zugewiesen bekommen und mit diesem der Bereich des Weges abgebildet werden. Hierbei muss sauber gearbeitet werden, da bereits ein Pixel ausreichend ist, den Übergang auf die nächste angrenzende Kachel zu versperren.
Am einfachsten nutzen wir hierzu die Einrastfunktion des Gitters. Hierzu müssen wir die Gittergröße so anpassen, dass immer ein Vielfaches der Gittergröße genau eine Kachelgröße abbildet.
Innerhalb von TileMap herrscht ein anderes Koordinationssystem. Wollen wir beispielsweise zu einer bestimmten Kachel hin, müssen wir dessen Koordinaten umrechnen.
Die 8.Kachel in der 8. Reihe hat folgende Koordinaten:
var d = $Navigation2D/TileMap.map_to_world(Vector2(8,8))
Wollen wir hingegen die Kachel an der Mausposition ermitteln:
var f = var f = $Navigation2D/TileMap.world_to_map(get_local_mouse_position())
— windy – 20.12.2018