带向量的实体运动
Entity movement with vectors
我正在为游戏 "Minecraft" 开发一个游戏,我必须在其中模拟攻城锤臂 "hitting" 一个门,从后坐力向后摆动,然后返回到其原始位置。如果您不知道什么是攻城槌,请观看 this 视频。
我的第一个问题是我无法以我想要的方式模拟这个动作。当我将新的 Vector
应用于实体速度时,实体以最大加速度开始。实体速度从 100mph 开始并立即开始减速,而不是随着时间的推移建立加速度,例如,在 10 秒内从 0 -> 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 将 "overwrite" 第一个矢量,显然,具有新的速度,并且不会在第一个方向上移动实体。
我想随着时间的推移增加实体的速度,然后一旦达到某个速度,就降低速度直到停止(同时仍然向同一方向移动)。一旦移动为 0(完全停止),应用另一个向量以相反的方向移动实体(就像视频中的攻城槌一样)。
是否有处理这种情况的最佳实践?是否有任何特定于 Minecraft 的解决方案?
在第一个示例中,您使用了 .getVelocity,它只是 returns 您无法更改的速度。如果您希望它缓慢加速,请使用某种循环,例如:
int velocity = 0.25;
loop {
velocity = velocity + 0.01;
stand.setVelocity(new Vector(0, 0, velocity));
}
这将以您想要的速度加速循环,只需更改它增加的速度,然后您可以添加检查速度是否为最大值,然后按您想要的方式停止它。
如果您想改变它移动的方向,只需将速度更改为 -x 或 -z 或 +x 或 +z。视情况而定。
我正在为游戏 "Minecraft" 开发一个游戏,我必须在其中模拟攻城锤臂 "hitting" 一个门,从后坐力向后摆动,然后返回到其原始位置。如果您不知道什么是攻城槌,请观看 this 视频。
我的第一个问题是我无法以我想要的方式模拟这个动作。当我将新的 Vector
应用于实体速度时,实体以最大加速度开始。实体速度从 100mph 开始并立即开始减速,而不是随着时间的推移建立加速度,例如,在 10 秒内从 0 -> 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 将 "overwrite" 第一个矢量,显然,具有新的速度,并且不会在第一个方向上移动实体。
我想随着时间的推移增加实体的速度,然后一旦达到某个速度,就降低速度直到停止(同时仍然向同一方向移动)。一旦移动为 0(完全停止),应用另一个向量以相反的方向移动实体(就像视频中的攻城槌一样)。
是否有处理这种情况的最佳实践?是否有任何特定于 Minecraft 的解决方案?
在第一个示例中,您使用了 .getVelocity,它只是 returns 您无法更改的速度。如果您希望它缓慢加速,请使用某种循环,例如:
int velocity = 0.25;
loop {
velocity = velocity + 0.01;
stand.setVelocity(new Vector(0, 0, velocity));
}
这将以您想要的速度加速循环,只需更改它增加的速度,然后您可以添加检查速度是否为最大值,然后按您想要的方式停止它。
如果您想改变它移动的方向,只需将速度更改为 -x 或 -z 或 +x 或 +z。视情况而定。