我正在为游戏 "Minecraft "开发一款游戏,在游戏中,我必须模拟一个打夯臂 "打 "到一个门上,因反冲力而回摆,然后回到原来的位置。如果你不知道什么是撞墙虎,请观看 这个 视频。
我的第一个问题是我不能以我想要的方式来模拟这个运动。当我应用一个新的 Vector
在实体速度上,实体以最大加速度开始。而不是随着时间的推移建立加速度,比如说,在10秒内从0-> 100mph,实体速度从100mph开始,然后立即开始减速。
我的第二个问题是,我不能以一种有意义的方式改变实体移动的方向。例如,如果我运行以下代码。
stand.setVelocity(new Vector(0, 0, -.25));
stand.getVelocity().add(new Vector(0, 0, 1));
Minecraft将不承认第二个向量。如果我改用以下代码。
stand.setVelocity(new Vector(0, 0, -.25));
stand.setVelocity(new Vector(0, 0, 1));
Minecraft会用新的速度 "覆盖 "第一个矢量 而不是让实体向第一个方向移动。
我想随着时间的推移,增加实体的速度,然后一旦达到一定的速度,降低速度,直到在停止(同时仍然在同一方向上移动)。一旦在0运动(完全停止),应用另一个矢量将实体向相反的方向移动(就像视频中的撞车一样)。
有没有一个最佳实践如何处理这样的情况?有什么Minecraft特有的解决方案吗?
在第一个例子中,你使用.getVelocity,它只是返回速度,你不能用它来改变。如果你想让它慢慢加速,就用一些循环,比如。
int velocity = 0.25;
loop {
velocity = velocity + 0.01;
stand.setVelocity(new Vector(0, 0, velocity));
}
这将以你想要的速度加速循环,只需改变它的速度,然后你可以添加一个检查,如果速度是最大的,然后按照你的要求停止它。
如果你想改变它移动的方向,只需改变速度,比如-x或-z或+x或+z,取决于你的情况。