Ok, ich habe ein aus 1x1 großen Knoten bestehendes grid-Array, das allerdings nicht gemalt werden soll, während Sprites bzw. Tiles aus Pixeln bestehen. Mittlerweile habe ich folgendes geschafft: Ich bin einfach davon ausgegangen, dass jeder Pixel aus meinen Sprite und Tile Bildern genauso groß ist wie meine eigens erzeugten Knoten für den A*. So. Nun habe ich einfach die nichtbegehbaren Kacheln mit TILED komplett als Bild gespeichert und anschließend die nichttransparenten Pixel der gesamten obstacle Map EINMAL mittels getRGB() in einer boolschen Methode, die true zurückgibt, wenn das Pixel nichttransparent ist,eingelesen. Und siehe da das funktionierte. Somit kann man behaupten, das ich sowas ähnliches wie Pixelgenaue Kollision erzielthabe, denn der A* nimmt jedes Pixel der nichtbegehbaren Elemente des Spiels als obstacle und umgeht diese dann dementsprechend. Also das war eig. von Anfang an der Plan, ich habs eig nicht so mit Perfektionismus, aber ich mags halt möglichst exakt.
Also noch zu deiner Antwort nochmal.
Das was du mir empfiehlst ist mir alles schon bekannt und habe es auch implementiert. Also BoundingBoxen und irgendwelche Kreisshapes, die dann (mir leider zu unpräzise) die obstacles darstellen und für die Kollisionen verwendet werden. Das ist ja auch richtig so. Aber deswegen stelle ich ja meine Frage auch so komisch mit ein Punkt ist kein Pixel. Ich versuche eben auch ein bißchen unkonventionellere Herangehensweisen auszuprobieren.
ABER: Was ich eingangs ganz vergessen habe zu erwähnen ist, das ich versuche eine Art Strategiespiel in 2D-Grafik zu entwickeln. HHHH.
Man sollte hier natürlich schon sagen was man überhaupt machen will.
Das Thema hätte sich damit eigentlich erledigt. Das einzige, was halt nicht erledigt ist, ist meine Annahme, das ein Pixel genau 1x1 groß ist.
Nun habe ich aber noch eine Frage:
Wie wird in Spielen wie Starcraft 2 o.ä. die Ziellinien vom Startknoten der Einheit zum Zielknoten ermittelt?
Das ist keine triviale Frage Vorsicht hier. Mir ist durchaus klar, dass ich von der x-bzw. y-Position eine simple Linie Zeichnen kann. Das Problem, dass ich aber damit habe ist, dass der berechnete Weg des A* ungleich zur dieser Ideallinie ist.
Und hier meine eigentliche neue Frage: Wie berechne ich diese eben beschriebene Ideallinie nur durch den A*? Denn das wäre optimal für mich. Nur komme ich da nicht wirklich weiter. Ich werde mir nun die Algorithmen zum Lininzeichnen anschauen (Bresenham Line usw.), aber vielleicht hat hier jemand ne bessere Idee?
Meine Vorstellung ist es dabei, wenn ich eine Einheit anklicke und diese dann irgendwo auf der Karte hinschicke, wird mittels A* der direkte Weg zum Ziel(Luftlinie) angezeigt und eben dank des A* , jedes obstacle auf der Ideallinie umgangen. Ich hoffe soweit klar.
Bisher erzeuge ich mit meinem A* eine Linie mit einem leichten Knick und ich weiss leider nicht wie man den rausbekommt. Zum einen kann das am f-Wert liegen zum anderen an der Sortierung der openList oder ich muss noch was am Algorithmus selbst ergänzen. Bin leider etwas faul zurzeit und möchte eig keinen Wertetabelleabend machen.
Wäre für Hilfe dankbar.
Gruß Javaist