我开始用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,也许我可以计算我移动到快速的点之间的点,或者删除彼此相邻的点。但是:首先,我不知道如何计算这个,(有没有数学逻辑来实现这个?)第二,当我这样做时,我可能无法改变敌人游戏的速度,那会不好
我的第二个想法是计算(跳过的点数之间)之间的点,这应该发生在每一帧,相对于实际速度。但是这里我的数学经验不足。
那么,这种方式是否可行,如果是的话,有人知道如何计算这个吗? 而且,如果没有,还有什么其他可能性来达到这个目标?
谢谢你,对不起的英语感到抱歉!
答案 0 :(得分:5)
你需要做的就是确定敌人在敌人类内的移动速度。
当它计算出下一个要移动的点时,然后通过从新位置减去当前位置来创建方向向量。
标准化方向向量(所以长度为1)然后乘以速度和tpf(每帧的时间)。
移动该数量而不是跳到下一个点。
(注意如果这些点非常靠近或者帧速率很低,这会导致它超出一点,但它应该没问题。)