2017-03-26 4 views
2

In meinem Libgdx Spiel habe ich Wegpunkte (ModelInstance) und ich muss wissen, die Entfernung zwischen ihnen. Ich versuchte Transform.getTranslation (neue Vector3) zu verwenden, aber es gibt die Übersetzung des Modells zurück. Ich habe keine Methoden gefunden, um die globale Position des Modells zu erhalten.So finden Sie Abstand zwischen zwei Objekten in libgdx

Antwort

0

den Abstand zu bekommen zwischen zwei Vektoren, die die dst Methode verwenden:

public float dst(Vector3 vector) 
Specified by: 
dst in interface Vector<Vector3> 
Parameters: 
vector - The other vector 
Returns: 
the distance between this and the other vector 

Vector3 reference

Der beste Weg, um Ihr Modell zu verfolgen, ist ein Wrapper erstellen, die Ihre Objektposition (Vector3) und Rotation speichert (Quaternion) und in diesem Wrapper stellen Sie die Modellposition auf dem render-Methode, so etwas wie diese:

public abstract class ModelWrapper{ 

    private ModelInstance model; 
    private Vector3 position; 
    private Quaternion rotation; 

    public ModelWrapper(ModelInstance model,Vector3 position,Quaternion rotation) { 
     this.model = model; 
     this.position = position; 
     this.rotation = rotation; 
    } 

    public ModelInstance getModel() { 
     return model; 
    } 

    public void setModel(ModelInstance model) { 
     this.model = model; 
    } 

    public Vector3 getPosition() { 
     return position; 
    } 

    public void setPosition(Vector3 position) { 
     this.position = position; 
    } 

    public Quaternion getRotation() { 
     return rotation; 
    } 

    public void setRotation(Quaternion rotation) { 
     this.rotation = rotation; 
    } 

    public void render(ModelBatch modelBatch, Environment environment) { 
     this.model.transform.set(this.position,this.rotation); 
     modelBatch.render(model, environment); 
    } 
} 
+0

Danke, sieht gut aus, es wird mir wirklich helfen. Und wie bekommt man die Position des Modells im globalen Raum? – Mike

+0

Ihre ModelWrapper-Instanz .getPosition() – Hllink

1

Ihr Spiel in 2D oder in 3D-Raum? Wenn in 2D, dann können wir einfach den Satz des Pythagoras verwenden und unsere eigene Methode schreiben:

double distance(Vector2 object1, Vector2 object2){ 
    return Math.sqrt(Math.pow((object2.x - object1.x), 2) + Math.pow((object2.y - object1.y), 2)); 
} 
+0

Genau das, was ich brauche, danke! – ROSA

Verwandte Themen