我正在为游戏“我的世界”开发一款游戏,在这款游戏中,我必须建模一个重击的撞击式手臂“击中”一扇门,从后坐力中摇摆回来,然后回到原来的位置。如果你不知道什么是撞击锤,请观看this视频。
我的第一个问题是,我不能以我想要的方式对这种运动进行建模。当我将新的Vector应用于实体速度时,实体以最大加速度开始。而不是随着时间的推移而加速,比如说,在10秒内从0 -> 100英里/小时开始,实体速度从100英里/小时开始并立即开始减速。
我的第二个问题是,我不能改变实体以一种有意义的方式移动的方向。例如,如果我运行以下代码:
stand.setVelocity(new Vector(0, 0, -.25));
stand.getVelocity().add(new Vector(0, 0, 1));“我的世界”不会承认第二个向量。如果我使用下面的代码:
stand.setVelocity(new Vector(0, 0, -.25));
stand.setVelocity(new Vector(0, 0, 1));“我的世界”将“覆盖”第一个向量,显然,用新的速度,而不是在第一个方向上移动实体。
我希望随着时间的推移增加实体的速度,然后一旦达到一定的速度,就降低速度,直到停止(同时仍在同一方向上移动)。一旦移动到0点(完全停止),应用另一个矢量向相反的方向移动实体(就像视频中的击球一样)。
有没有处理这种情况的最佳实践?有没有什么特定于我的世界的解决方案?
发布于 2020-06-08 04:23:22
在第一个例子中,你使用.getVelocity,它只返回速度,你不能用它来改变它。如果你想让它慢慢加速,可以使用某种循环,比如:
int velocity = 0.25;
loop {
velocity = velocity + 0.01;
stand.setVelocity(new Vector(0, 0, velocity));
}这将以你想要的速度加速循环,只需改变它增加的量,然后你可以添加一个检查,看看速度是否为最大值,然后按你想要的方式停止它。
如果你想改变它的移动方向,只需根据你的情况改变速度,如-x、-z、+x或+z。
https://stackoverflow.com/questions/62241111
复制相似问题