让敌人以相同的速度走一条路

T_0*_*_01 2 java performance game-physics path-2d

我开始用java编写游戏.我有Enemys和一个玩家,一个基本的2D游戏,这是第一次获得经验.

现在我想让Enemys走一条路,我可以把它画进一个"关卡编辑器".我有一个JPanel,一个mouseMoveListener,然后单击Path2D开始将mouseMove点保存到Path2D.Double对象.

之后,我实现了以下方法来使enemys遵循这条路径:

public void forward(){
    if(!pathIterator.isDone()){
        pathIterator.currentSegment(current);
        x = current[0];
        y = current[1];
        pathIterator.next();
    }
    else {
        dead = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为它清楚现在发生了什么:敌人跟随,但速度是我移动鼠标.因此,如果我快速移动鼠标,敌人只会......从一个点"跳跃"到另一个点.慢下来,它"偷偷摸摸"了这一点.(因为我不是机器人,我不能以相同的速度移动鼠标^^)

谈论机器人:是的,我可以让一个awt.Robot移动我的鼠标.但这也不可能,因为我必须绘制复杂的路径,这些路径没有任何可见的数学背后.

所以,我想让这个Enemys以相同的速度在这条路上前进.我的问题:我不知道在哪里实施"修复".我有2个想法:

  • 也许我可以在路径创建上工作:不仅可以将点添加到Path2D,也许我可以计算我移动到快速的点之间的点,或者删除彼此靠近的点.但是:首先,我不知道如何计算这个,(有没有数学逻辑来实现这个?)第二,当我这样做时,我可能无法改变敌人游戏的速度,那会很糟糕的

  • 我的第二个想法是计算(跳过点之外的点)之间的点,这应该发生在每一帧,相对于实际速度.但是在这里我没有足够的数学经验.

那么,这种方式是否可能,如果是的话,有人知道如何计算这个吗?而且,如果没有,我有什么其他可能性来实现这一目标?

谢谢你,对不起英语不好意思!

Tim*_*m B 5

你需要做的就是确定敌人在敌人类内的移动速度.

当它计算出下一个要移动的点时,然后通过从新位置减去当前位置来创建方向向量.

归一化方向向量(所以长度为1)然后乘以速度和tpf(每帧的时间).

移动该数量而不是跳到下一个点.

(注意,如果这些点非常接近或帧速率很低,这可能会导致它超出一点,但它应该没问题).