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

时间:2014-01-21 11:38:03

标签: 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;
    }
}

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

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

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

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

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

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

谢谢你,对不起的英语感到抱歉!

1 个答案:

答案 0 :(得分:5)

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

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

标准化方向向量(所以长度为1)然后乘以速度和tpf(每帧的时间)。

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

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