如何在libgdx中查找两个对象的距离

时间:2017-03-26 07:56:40

标签: java android 3d libgdx

在我的LibGdx游戏中,我有路径(ModelInstance),我需要知道它们的距离。 我尝试使用 Transform.getTranslation(new Vector3),但它返回模型的翻译。我找不到获取全球模型位置的方法。

2 个答案:

答案 0 :(得分:2)

要获得两个向量之间的距离,请使用dst方法:

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

跟踪模型的最佳方法是创建一个包装器,用于存储对象位置(Vector3)和旋转(Quaternion),并在此包装器中设置渲染方法的模型位置,如下所示:

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);
    }
}

答案 1 :(得分:1)

您在2D或3D空间中的游戏? 如果在2D中,那么我们可以简单地使用毕达哥拉斯定理并编写我们自己的方法:

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