2013-12-13 31 views
0

我真的需要幫助找出一個速度方程來發射玩家從一個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; 
} 

我不知道在我的世界的比重也不知道運動摩擦。上述代碼的問題在於它沒有朝着正確的方向前進,也沒有產生我期待的拋物線效應。

+0

如需更快獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

+0

好的,每次這個被稱爲當前的位置通過,而不是初步的位置,這將使事情有點平穩。 –

+0

你能跟蹤其他領域嗎?就像起跑位置以及跳起之後已經過去了多少時間一樣 –

回答

1

基於尼克羅德答案我刪除重力爲所有,但在y(在的Minecraft,上下爲y)。然後我將所有飛機的速度提高了一倍,並且它結束了工作!這裏是代碼。我也發現重力實際上是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); 
} 
0

問題的一部分在於重力只會對z向量起作用。在x或y方向上不會有重力。這可以解釋爲什麼你的代碼會產生比預期更多的運動。

嘗試(假定t被定義爲轉運的總時間):

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