调节游戏中的步速

时间:2014-06-20 20:49:55

标签: java math game-physics

我正在开发一款游戏,我需要创建一种创建动作的方法。它需要做的是获取x ytarget 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。任何帮助表示赞赏! :)

另外一些示例代码也不错!

2 个答案:

答案 0 :(得分:1)

需要考虑的一些事项:

  1. 在今天的多核,多任务计算机中,您无法可靠地预测每个渲染帧或每个逻辑/物理/ AI更新之间经过的时间。
  2. 正如您在解决方案中发现的那样,您的速度计算基于距离,当需要每单位时间移动一些单位时(可能是像素/秒,或块/第二 - 无论你的游戏中有什么度量单位都有意义。)
  3. 当你在世界各地移动时,通常最好测量自上次移动物体以来经过的时间,然后乘以你的速度所经过的时间,因为{{ 1}}
  4. 如果您正在使用游戏引擎,这将是一个非常好的主意,因为这是一个已解决的问题,它们将提供某种类型的&#34; delta&#34;时间告诉你自上次逻辑/物理/ AI更新以来已经过了多少时间。您可以使用该值。

答案 1 :(得分:0)

也许你问的是,给定:

  • A点和B点之间的distance
  • 每步的固定距离让我们称之为stepSize

您希望拥有float []

每次步行distance,每次stepSize一步所需的一个元素。所以:

stepSize = speed / 60.0;   // 60 fps
stepCount = distance / stepSize;

然后是一个从0到stepCount-1的for循环,在每一步上移动stepSize距离。

在这种情况下,我不知道你需要一个float []。如果你的步长没有均匀地划分你需要行进的距离,并且在最后一步你超过了你的目标,那么在最后一步只需将(x,y)设置为目标(x) ,y)