我正在开发一款游戏,我需要创建一种创建动作的方法。它需要做的是获取x y
和target x y
值并创建一个float[]
,其内部的移动被定义为特定时间。对于一定量的帧,移动将在每帧使用,直到它在特定时间内到达目标。这是我到目前为止所拥有的。
public void calculateRoute(int time) {
if(x > tx){
movement[0] = -((x - tx) / time);
}else if(x < tx){
movement[0] = ((tx - x) / time);
}else if(x == tx){
movement[0] = 0;
}
if(y > ty){
movement[1] = -((y - ty) / time);
}else if(y < ty){
movement[1] = ((ty - y) / time);
}else if(y == ty){
movement[1] = 0;
}
}
问题在于目标越远,运动越快。我想让运动调节到一定的速度,但仍然达到目标。基本上我需要将time
变量计算为始终相同的速度,无论距离如何。我尝试将此移动设置为1,但它会错过目标,因为x
可能是500,而y
可能是700.最终会变为x = 700, y = 700
。任何帮助表示赞赏! :)
另外一些示例代码也不错!
答案 0 :(得分:1)
需要考虑的一些事项:
如果您正在使用游戏引擎,这将是一个非常好的主意,因为这是一个已解决的问题,它们将提供某种类型的&#34; delta&#34;时间告诉你自上次逻辑/物理/ AI更新以来已经过了多少时间。您可以使用该值。
答案 1 :(得分:0)
也许你问的是,给定:
distance
stepSize
您希望拥有float []
:
每次步行distance
,每次stepSize
一步所需的一个元素。所以:
stepSize = speed / 60.0; // 60 fps
stepCount = distance / stepSize;
然后是一个从0到stepCount-1的for循环,在每一步上移动stepSize距离。
在这种情况下,我不知道你需要一个float []。如果你的步长没有均匀地划分你需要行进的距离,并且在最后一步你超过了你的目标,那么在最后一步只需将(x,y)设置为目标(x) ,y)