我真的需要帮助找出一个速度方程,以便将一个玩家从一个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中的引力,也不知道运动摩擦力。上面代码的问题在于它没有朝着正确的方向发展,也没有创建我正在寻找的抛物线效果。
答案 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));