Java 游戏中的步速调节
我正在开发一个游戏,我需要创建一个方法来创建一个动作。它需要做的是获取Java 游戏中的步速调节,java,math,game-physics,Java,Math,Game Physics,我正在开发一个游戏,我需要创建一个方法来创建一个动作。它需要做的是获取xy和targetxy值,并创建一个float[],其中的移动定义为特定时间。移动将在一定数量的帧内每帧使用一次,直到在特定时间内到达目标。这是我到目前为止所拥有的 public void calculateRoute(int time) { if(x > tx){ movement[0] = -((x - tx) / time); }else if(x < tx){
xy
和targetxy
值,并创建一个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;
}
}
public void计算器输出(整数时间){
如果(x>tx){
移动[0]=-((x-tx)/时间);
}否则如果(xty){
运动[1]=-((y-ty)/时间;
}else if(y
问题是,距离目标越远,移动越快。我想让运动调节到一定的速度,但仍然达到它的目标。基本上,我需要计算时间
变量,使其速度始终相同,无论距离如何。我尝试将移动设置为1,但它会错过目标,因为x
可能是500,而y
可能是700。它最终将是x=700,y=700
。感谢您的帮助!:)
还有一些示例代码会很好 需要考虑的一些事情:
speed*time=distance moved
- ,这是当今流行的游戏引擎
- ,但这一概念在任何游戏/游戏引擎中都是相同的
- a点a和点B之间的距离
- 每一步的固定距离我们称之为
stepSize
浮点[]
中有:
移动距离所需的每一步一个元素,一次一个步长。因此:
stepSize = speed / 60.0; // 60 fps
stepCount = distance / stepSize;
然后是一个从0到步长计数-1的for循环,在每一步上移动步长距离
我不知道在这种情况下,你需要一个float[]做什么。如果你的步幅大小不能平均分配你需要行驶的距离,并且在最后一步你有点超出了目标,那么在最后一步,只需将(x,y)设置为目标(x,y)时间并不重要。我只想用不同的斜边来计算运动。运动是像素/帧,我的游戏被调整为60帧,但是因为#1,你不能做像素/帧。你永远也得不到每秒60帧。若你们还并没有发现这一点,那个么你们最终会因为帧定时的细微变化而产生抖动。没有人能始终获得60.0 fps(每帧16.6ms)。您将获得抖动,如[16.5,13.0,20.2,16.4,…]
等,其中您可能在1000毫秒内渲染总共60帧,但每帧之间的时间不一致。这是一个基本的、常见的但不正确的假设,“抖动”对我来说并不重要。我使用的是纳米计时器,帧之间的时间足够一致,因为我考虑了增量时间。纳米计时器不会消除抖动。抖动是由于无法知道代码何时实际执行造成的,因为它运行的线程是由操作系统调度的,而不是直接由您控制的。