首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用矢量进行实体移动

使用矢量进行实体移动
EN

Stack Overflow用户
提问于 2020-06-07 13:08:34
回答 1查看 236关注 0票数 0

我正在为游戏“我的世界”开发一款游戏,在这款游戏中,我必须建模一个重击的撞击式手臂“击中”一扇门,从后坐力中摇摆回来,然后回到原来的位置。如果你不知道什么是撞击锤,请观看this视频。

我的第一个问题是,我不能以我想要的方式对这种运动进行建模。当我将新的Vector应用于实体速度时,实体以最大加速度开始。而不是随着时间的推移而加速,比如说,在10秒内从0 -> 100英里/小时开始,实体速度从100英里/小时开始并立即开始减速。

我的第二个问题是,我不能改变实体以一种有意义的方式移动的方向。例如,如果我运行以下代码:

代码语言:javascript
运行
复制
        stand.setVelocity(new Vector(0, 0, -.25));
        stand.getVelocity().add(new Vector(0, 0, 1));

“我的世界”不会承认第二个向量。如果我使用下面的代码:

代码语言:javascript
运行
复制
        stand.setVelocity(new Vector(0, 0, -.25));
        stand.setVelocity(new Vector(0, 0, 1));

“我的世界”将“覆盖”第一个向量,显然,用新的速度,而不是在第一个方向上移动实体。

我希望随着时间的推移增加实体的速度,然后一旦达到一定的速度,就降低速度,直到停止(同时仍在同一方向上移动)。一旦移动到0点(完全停止),应用另一个矢量向相反的方向移动实体(就像视频中的击球一样)。

有没有处理这种情况的最佳实践?有没有什么特定于我的世界的解决方案?

EN

Stack Overflow用户

回答已采纳

发布于 2020-06-08 04:23:22

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

代码语言:javascript
运行
复制
int velocity = 0.25;

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

这将以你想要的速度加速循环,只需改变它增加的量,然后你可以添加一个检查,看看速度是否为最大值,然后按你想要的方式停止它。

如果你想改变它的移动方向,只需根据你的情况改变速度,如-x、-z、+x或+z。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62241111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档