2016-04-27 23 views
3

我在这个游戏中创建了一个网格中的游戏(如国际象棋,x/y坐标),有一些射击必须击中移动目标。如何计算弹丸撞击移动目标的协调位置?

移动目标沿着由X步/ X坐标组成的路径(通过A *路径查找获得)。子弹不会沿着路径行进,他们直接从发送者到达目标。

我想计算了抛射命中目标的坐标(根据他的路径)

我试图用:2d game : fire at a moving target by predicting intersection of projectile and unit但如果炮弹在目标依次飞过这个算法是行不通的。

你能帮我解决这个算法吗?

作为输入我有:

  • 目标路径的每个步骤的Cordinates
  • 速度目标&弹丸
  • 实际X/Y目标位置(它可以是一个浮动如x:7.61 ,Y:如果需要5.22)
  • 位置抛射发件人

你可以认为:

  • 炮弹在目标永远不会改变他的路飞
  • 如果目标不动,速度等于0
  • 如果需要

感谢抛射开始可以被延迟任何帮助!

回答

2

你快到了。

用对象到达那里的时间(应该是长度/速度)注释对象路径中的每一步。

接下来获取路径的每一段,并假设目标只沿该段移动,并使用找到的答案找出它会相交的地方。有3个选项。

  1. 你在段内的某个地方点击目标。这是您正在寻找的解决方案。
  2. 您会在细分结束后点击目标。这意味着你太遥远了,所以你不能在目标旅行的时候碰到目标。您需要尝试路径的下一部分。
  3. 您会在细分的起始点之前点击目标。这意味着该部分相对较近,您应该可以在任何需要的时间点击目标。您可以决定这是一个解决方案,并为您的镜头添加一些延迟,以便目标位于细分区域内,或尝试上一个细分区域。

鉴于上述情况,我将从目标路径的第一部分开始。如果你不能在那里击中目标,请尝试下一个目标,直到你找到一个可以击中目标的目标为止。这将是目标在范围内的第一个位置,所以镜头应该没有延迟。

+0

谢谢!看起来不错,现在,我需要一些时间来实现它;) – CyrilleGuimezanes

+0

在帖子我链接我没有使用接受的答案(这是在我的opignon没有很好解释...)是有可能使用你的答案与http ://stackoverflow.com/a/3487761/1319359(我链接问题的另一个答案)? – CyrilleGuimezanes

+0

@CyrilleGuimezanes是的,那会。仔细检查角落案例的处理(例如,射弹太慢而无法到达目标,或者当解决方案非常接近片段末尾时如何进行比较)。 – Sorin

1

算法1:调整发射时间

  1. 计算目标是否在一条直线上移动从发送者直接远才能够把射弹的时间。

  2. 计算该时间量过去后目标的位置。

  3. 计算弹丸到达该点的距离和时间。

  4. 适当延迟发射。

缺点:如果目标正在朝发送方直线移动并且初始距离很大,那么此算法可能会导致很长的延迟。

如果延迟太大,您可能需要重新计算,并使用较早的罢工时间。

算法2:调整弹丸速度

  1. 使用您链接找到罢工时间的算法。

  2. 计算当时目标的位置。

  3. 设定发射速度,使其在与目标同时达到发射点。射弹速度应该在发射时确定。

缺点:如果目标立即转向或离开发送者,那么抛射物可能会有明显不同于正常速度的速度。

我更喜欢算法2。我认为玩家会意识到弹丸立即开始跋涉。如果使用算法1,游戏可能看起来没有反应。我认为偶尔的缓慢/快速射弹不会打扰玩家。