Federhalter
Mitglied
Hallo,
mal wieder geht's um den A* nach sehr langer Arbeit daran, habe ich ihn jetzt endlich fertiggestellt.
Leider hat sich wieder ein neues Problem aufgetan.
Ich möchte nun, dass sich Einheiten ( mir reicht auch schon mal eine einzige ) als eine Art Figur, entlang des ermittelten Pfades bewegen.
Das ist allerdings alles nicht so einfach wie ich dachte. Zwar möchte ich schon wissen wie das funktioniert, allerdings tauchen mehrere Probleme auf.
1. Wie genau muss das Spielfeld aufgebaut sein, um Einheiten überhaupt wie gewohnt mit der üblichen Formel zu bewegen?
2. Mein A* verwendet Nachbarn, die genau 1x1 sind. Wie verhindert man dann Performanceprobleme bei größeren Spielfeldern?
3. (Analog zu 2 ) Gibt es noch andere Ansätze die zum Erfolg führen?
Nun nochmal etwas konkreteres:
Ich habe meinen Pfad in einer Liste, der via Mausklick auf das Spielfeld generiert und gezeichnet wird.
Das heißt ich kann auf jedes Element der Pfadliste zugreifen.
Natürlich weiß ich, dass ich nun meiner Einheit einfach nur die Position von den Elementen aus dem Pfad zuweisen müsste, allerdings klappt das nicht so ganz.
Denn, nachdem die Einheit das Ende des ersten Pfadelements der Liste erreicht hat, stürzt das gesamte Programm ab, ohne Fehlermeldung in der Konsole, aber mit Fehlermeldung von Windows.
Normalerweise lernt man ja aus Fehlern, aber wenn man nicht weiß, was genau der Fehler ist, wird es schwierig.
Also nochmal zusammengefasst:
In einer Methode move() soll eine Einheit entlang des ermittelten Pfades grafisch bis zum Ziel bewegt werden. Wie erreicht man das?
Hier mal meine fehlerhafte move()-Methode:
Wie ordnet man die Positionen des Pfades besser den Positionen der Einheit zu und warum stürtzt das gesamte Programm ab?
Gruß Eichelhäer
mal wieder geht's um den A* nach sehr langer Arbeit daran, habe ich ihn jetzt endlich fertiggestellt.
Leider hat sich wieder ein neues Problem aufgetan.
Ich möchte nun, dass sich Einheiten ( mir reicht auch schon mal eine einzige ) als eine Art Figur, entlang des ermittelten Pfades bewegen.
Das ist allerdings alles nicht so einfach wie ich dachte. Zwar möchte ich schon wissen wie das funktioniert, allerdings tauchen mehrere Probleme auf.
1. Wie genau muss das Spielfeld aufgebaut sein, um Einheiten überhaupt wie gewohnt mit der üblichen Formel zu bewegen?
2. Mein A* verwendet Nachbarn, die genau 1x1 sind. Wie verhindert man dann Performanceprobleme bei größeren Spielfeldern?
3. (Analog zu 2 ) Gibt es noch andere Ansätze die zum Erfolg führen?
Nun nochmal etwas konkreteres:
Ich habe meinen Pfad in einer Liste, der via Mausklick auf das Spielfeld generiert und gezeichnet wird.
Das heißt ich kann auf jedes Element der Pfadliste zugreifen.
Natürlich weiß ich, dass ich nun meiner Einheit einfach nur die Position von den Elementen aus dem Pfad zuweisen müsste, allerdings klappt das nicht so ganz.
Denn, nachdem die Einheit das Ende des ersten Pfadelements der Liste erreicht hat, stürzt das gesamte Programm ab, ohne Fehlermeldung in der Konsole, aber mit Fehlermeldung von Windows.
Normalerweise lernt man ja aus Fehlern, aber wenn man nicht weiß, was genau der Fehler ist, wird es schwierig.
Also nochmal zusammengefasst:
In einer Methode move() soll eine Einheit entlang des ermittelten Pfades grafisch bis zum Ziel bewegt werden. Wie erreicht man das?
Hier mal meine fehlerhafte move()-Methode:
Code:
public void move(){
if(Mouse.right){
int startx = x / size;
int starty = y / size;
int endx = (Mouse.mousex-(Mouse.mousex%size))/size;
int endy = (Mouse.mousey-(Mouse.mousey%size))/size;
path = findPath(startx,starty,endx,endy);
}
if(path!=null){
if(path.size() > 0){
Node node = path.get(path.size()-1);
x = node.i*size;
y = node.j*size;
}
}
}
Gruß Eichelhäer