实体移动与矢量

问题描述 投票:0回答:1

我正在为游戏 "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特有的解决方案吗?

java vector game-physics minecraft
1个回答
2
投票

在第一个例子中,你使用.getVelocity,它只是返回速度,你不能用它来改变。如果你想让它慢慢加速,就用一些循环,比如。

int velocity = 0.25;

loop {
   velocity = velocity + 0.01;
   stand.setVelocity(new Vector(0, 0, velocity)); 
}

这将以你想要的速度加速循环,只需改变它的速度,然后你可以添加一个检查,如果速度是最大的,然后按照你的要求停止它。

如果你想改变它移动的方向,只需改变速度,比如-x或-z或+x或+z,取决于你的情况。

© www.soinside.com 2019 - 2024. All rights reserved.