需要一个等式来找到所需的速度

时间:2013-12-13 14:03:13

标签: java bukkit

我真的需要帮助找出一个速度方程,以便将一个玩家从一个X Y Z位置发射到另一个位置。从查看other threads我创建了以下代码(代码不起作用)

public void vJump(Entity entity, Location loc, double time)
{
    this.entity = entity;
    entity.setVelocity(getV(entity.getLocation(), loc, time));
}

private Vector getV(Location p1, Location p2, double t)
{
    double x = p2.getX() - p1.getX();
    double y = p2.getY() - p1.getY();
    double z = p2.getZ() - p1.getZ();
    double gravity = -14.266;
    return new Vector(getVelocity(x,gravity,t), getVelocity(y,gravity,t), getVelocity(z,gravity,t));
}

private double getVelocity(double d, double a, double t)
{
    a*=-.5;
    a*=Math.pow(t,2);
    d-=a;
    return d/t;
}

我不知道Minecraft中的引力,也不知道运动摩擦力。上面代码的问题在于它没有朝着正确的方向发展,也没有创建我正在寻找的抛物线效果。

2 个答案:

答案 0 :(得分:1)

基于尼克罗德斯回答我删除了重力除了y(在我的世界中,上下都是y)。然后我将所有飞机的速度加倍2,它最终工作了!这是代码。我也发现重力实际上是0.1。

public void vJump(Entity entity, Location loc, double time)
{
    this.entity = entity;
    entity.setVelocity(getV(entity.getLocation(), loc, time));
}

private Vector getV(Location p1, Location p2, double t)
{
    double x = p2.getX() - p1.getX();
    double y = p2.getY() - p1.getY();
    double z = p2.getZ() - p1.getZ();
    double gravity = 0.1;
    return new Vector(getVelocity(x,0,t), getVelocity(y,gravity,t), getVelocity(z,0,t));
}

private double getVelocity(double d, double a, double t)
{
    a*=-.5;
    a*=Math.pow(t,2);
    d-=a;
    return 2*(d/t);
}

答案 1 :(得分:0)

部分问题在于重力只会对z矢量起作用。在x或y方向上将没有重力。这可以解释为什么你的代码会在另一个方向产生移动而不是预期。

尝试(假设t被定义为总的过境时间):

return new Vector(getVelocity(x,0,t), getVelocity(y,0,t), getVelocity(z,gravity,t));