2016-04-07 21 views
2

I-Code haben, die einen Weg in Libgdx ist die Ausgabe:Nach einem Pfad in Libgdx

public Target(Vector2 villager, Vector2 target){ 
     pathFinder = new IndexedAStarPathFinder<Node>(LevelManager.graph, false); 

     int startX = (int) villager.x; 
     int startY = (int) villager.y; 

     int endX = (int) target.x; 
     int endY = (int) target.y; 

     Node startNode = LevelManager.graph.getNodeByXY(startX, startY); 
     Node endNode = LevelManager.graph.getNodeByXY(endX, endY); 

     pathFinder.searchNodePath(startNode, endNode, new HeuristicImp(), resultPath); 
     Gdx.app.log("Path", ""+ resultPath.getCount()); 

    } 

Meine Frage ist, gibt es eine Möglichkeit, dann die ResultPath mit Bewegung zu implementieren, ohne Lenkverhalten mit? Etwas einfach zu erfassen und zu implementieren? Ich spreche davon, das X und Y eines Sprites in Übereinstimmung mit dem ausgegebenen Pfad zu bewegen. Hilfe wäre willkommen!

Antwort

1

Sie müssen nur Ihr Sprite von seiner currentPosition auf die nextPosition verschieben - Sie können diese Werte in Vector2 Klassen-Instanzen speichern.

Sie werden sich wie in Ihrem render() Methode Sprites Position werden updateing

Vector2 currentPosition, nextPosition; 
    final float SPEED; //how fast sprite will be moved 

    //render() 
    Vector2 step = nextPosition.cpy().sub(currentPosition).nor().scl(SPEED); 
    sprite.setPosition(sprite.getX() + step.x, sprite.getY() + step.y); 

dann müssen Sie überprüfen, ob Ihr Sprite nextPosition erreicht (oder besser gesagt, wenn es Abstand davon klein genug ist), und wenn ja, man muss eingestellt neuer nextPosition Wert

if(nextPosition.cpy().sub(sprite.getX(), sprite.getY()).len() < SOME_LENGTH) { 
     nextPosition = getNextPosition(); 

Wenn keine neuen nextPosition zu erhalten ist, dann wird der neue nextPosition Wert nur Sprites Position sein soll (halten es in place)

+0

Woher kommt der resultPath? Schlingen Sie durch, wenn die Verbindungen hinzugefügt werden? Oder interpretierst du irgendwie den ganzen Weg? Ich verstehe nicht, wie sich der Pfad in die nextPosition übersetzt. – Snupas

+0

Als 'nextPosition' sollten Sie nur den nächsten Knoten des Pfades behalten - der ganze Pfad sollte in einer anderen Variablen bleiben –

+0

Irgendwelche Hinweise darauf, wo die Node to Vector2 Übersetzung passiert? – Snupas