2

我开始用java编写游戏。我有 Enemys and a Player,一个基本的 2D 游戏,这是第一次获得经验。

现在我希望敌人遵循一条路径,我可以将其绘制到“关卡编辑器”中。我有一个 JPanel,一个 mouseMoveListener,单击 Path2D 开始将 mouseMove 点保存到 Path2D.Double 对象。

之后,我实现了以下方法,让敌人沿着这条路走:

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

我认为现在发生的事情很清楚:敌人正在跟随,但速度是我移动鼠标的速度。因此,如果我快速移动到鼠标,敌人就会......从一个点“跳”到另一个点。放慢速度,它“偷偷摸摸”地越过这些点。(而且因为我不是机器人,我不能以相同的速度移动鼠标^^)

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

所以,我想让这个敌人以同样的速度在这条路上前进。我的问题:我不知道在哪里实施“修复”。我有两个想法:

  • 也许我可以创建路径:不只是将点添加到 Path2D,也许我可以计算我快速移动的点之间的点,或者删除彼此靠近的点。但是:首先,我不知道如何计算,(是否有任何数学逻辑可以实现这个?)其次,当我这样做时,我可能无法改变敌人在游戏中的速度,而且会很糟糕

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

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

谢谢,抱歉英语不好!

4

1 回答 1

5

您需要做的就是定义敌人在敌人类中的移动速度。

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

归一化方向向量(因此长度为 1),然后将其乘以速度和 tpf(每帧时间)。

移动那个量而不是跳到下一个点。

(请注意,如果这些点非常靠近或帧速率很低,这可能会导致它有点过冲,但应该没问题)。

于 2014-01-21T11:40:47.257 回答