Hallo,
ich versuche zwischen A* und Luftlinie zu switchen. Soll heißen ich hab ein Feld mit Hindernissen auf dem sich Einheiten Feldweise und direkt von A nach B (MausKlick) begen lassen. Meine Positionen sind als doubles implementiert und sin absolute Koordinaten mein A* läuft via tilekoordinaten. Nun habe ich ne variable tileposition x/y die die aktuelle tileposition speichert. Diese läuft immer mit und wird ständig upgedatet. Jetzt hab ich einfach pro Frame abgefragt, ob vor der zu bewegenden Einheit ein Hindernis ist. Falls ja nimm a* andernfalls lauf direkt. Ich vermute dass das mit den doubles nicht hinhaut aber wo genau der fehler liegt weiss ich nicht.
Hier mal etwas Code:
das aktualisiert die tileposition
würde mich über hilfe freuen
ich versuche zwischen A* und Luftlinie zu switchen. Soll heißen ich hab ein Feld mit Hindernissen auf dem sich Einheiten Feldweise und direkt von A nach B (MausKlick) begen lassen. Meine Positionen sind als doubles implementiert und sin absolute Koordinaten mein A* läuft via tilekoordinaten. Nun habe ich ne variable tileposition x/y die die aktuelle tileposition speichert. Diese läuft immer mit und wird ständig upgedatet. Jetzt hab ich einfach pro Frame abgefragt, ob vor der zu bewegenden Einheit ein Hindernis ist. Falls ja nimm a* andernfalls lauf direkt. Ich vermute dass das mit den doubles nicht hinhaut aber wo genau der fehler liegt weiss ich nicht.
Hier mal etwas Code:
das aktualisiert die tileposition
Java:
if(entities.get(0).marked) {
entities.get(0).tilepositionx = Maths.toTileX((int)entities.get(0).position.x);
entities.get(0).tilepositiony = Maths.toTileX((int)entities.get(0).position.y);
if(checkObstacles(entities.get(0))) {
entities.get(0).path = TiledMap.findPath(entities.get(0).tilepositionx,entities.get(0).tilepositiony,(int)Maths.toTileX(rightx),(int)Maths.toTileY(righty));
entities.get(0).moveAStar(); // das ist die a* kachelbewegung
}
else {
entities.get(0).move(rightx,righty); // das ist die direkte bewegung
}
}
würde mich über hilfe freuen