【发布时间】:2014-01-21 11:38:02
【问题描述】:
我开始用 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 移动我的鼠标。但这也不太可能,因为我必须绘制复杂的路径,这些路径背后没有任何可见的数学。
所以,我想让这个敌人以同样的速度在这条路上前进。我的问题:我不知道在哪里实施“修复”。我有 2 个想法:
也许我可以创建路径:不只是将点添加到 Path2D,也许我可以计算我快速移动的点之间的点,或者删除彼此靠近的点。但是:首先,我不知道如何计算,(有什么数学逻辑可以实现这个吗?)其次,当我这样做时,我可能无法改变游戏中敌人的速度,而且会很糟糕
我的第二个想法是计算之间的点(或要跳过的点),这应该发生在每一帧,相对于实际速度。但是这里我的数学经验不够。
那么,这是否可行,如果可以,有人知道如何计算吗? 如果没有,我还有什么其他的可能性来实现这一目标?
谢谢你,抱歉英语不好!
【问题讨论】:
-
您总是可以考虑使用 Splines,这意味着您在应用程序中生成一组控制点来创建路径,您可以在游戏中使用这些控制点。然而,在我看来,这是一个相当困难的主题,所以我不确定你现在是否应该接受它。
-
我当时也是这么想的 ^^ 谢谢你的想法,但 Tim B 已经命名了解决方案。还是谢谢你!
标签: java performance game-physics path-2d