如何计算弹丸击中移动目标的坐标?
How to calculate the coordinated where the projectile will hit the moving target?
我正在创建一个网格游戏(如国际象棋,x/y 坐标)在这个游戏中有一些射弹必须击中移动目标。
移动目标遵循由 X/Y 坐标的 X 步组成的路径(通过 A* 寻路获得)。抛射物不遵循路径,它们直接从发射器到目标。
我想计算弹丸击中目标的坐标(根据他的路径)
我尝试使用:2d game : fire at a moving target by predicting intersection of projectile and unit但是如果目标在抛射物飞行过程中转向,这个算法就不起作用。
你能帮我解决这个算法吗?
作为输入我有:
- 目标路径每一步坐标
- 目标和射弹的速度
- 实际x/y目标位置(如果需要,可以是x:7.61,y:5.22之类的浮点数)
- 发射器位置
你可以这样考虑:
- 目标在弹丸飞行过程中永远不会改变他的路径
- 如果目标没有移动,则速度等于0
- 如果需要,可以延迟弹丸启动
感谢您的帮助!
算法一:调整启动时间
如果目标沿直线直接远离发射器,计算弹丸所需的时间。
计算经过该时间后目标所在的位置。
计算弹丸到达该点所需的距离和时间。
适当延迟发布。
缺点:如果目标直接向发送者移动并且初始距离很远,则此算法可能会产生很长的延迟。
如果延迟太大,您可能需要重新计算,并使用较早的罢工时间。
算法二:调整弹丸速度
使用您链接的算法找到罢工时间。
计算目标当时的位置。
设置弹丸速度,使其与目标同时到达打击点。弹丸速度应在发射时确定。
缺点:如果目标立即转向或远离发射器,射弹的速度可能与正常速度明显不同。
我更喜欢算法2。我认为玩家会欣赏弹丸立即开始跋涉。如果您使用算法 1,游戏可能看起来没有响应。我不认为偶尔的 slow/fast 射弹会打扰到玩家。
你快到了。
用对象到达那里的时间注释对象路径中的每个步骤(应该是 length/speed)。
接下来取路径的每一段并假设目标仅沿着该段移动并使用您找到的答案找出它会相交的位置。有3个选项。
- 您击中了该段内某处的目标。这就是您正在寻找的解决方案。
- 您将在该段结束后击中目标。这意味着您距离太远,因此无法在目标行驶该特定路段时击中目标。您需要尝试路径的下一段。
- 您会在分段的起点之前击中目标。这意味着该段相对较近,您应该可以随时击中目标。您可以确定这是一个解决方案,并为您的镜头添加一些延迟,以便目标位于片段内,或者尝试上一个片段。
鉴于以上情况,我将从目标路径的第一段开始。如果你不能在那里击中目标,请尝试下一个,直到找到一个你可以击中目标的地方。这将是目标在射程内的第一个位置,因此射击应该没有延迟。
我正在创建一个网格游戏(如国际象棋,x/y 坐标)在这个游戏中有一些射弹必须击中移动目标。
移动目标遵循由 X/Y 坐标的 X 步组成的路径(通过 A* 寻路获得)。抛射物不遵循路径,它们直接从发射器到目标。
我想计算弹丸击中目标的坐标(根据他的路径)
我尝试使用:2d game : fire at a moving target by predicting intersection of projectile and unit但是如果目标在抛射物飞行过程中转向,这个算法就不起作用。
你能帮我解决这个算法吗?
作为输入我有:
- 目标路径每一步坐标
- 目标和射弹的速度
- 实际x/y目标位置(如果需要,可以是x:7.61,y:5.22之类的浮点数)
- 发射器位置
你可以这样考虑:
- 目标在弹丸飞行过程中永远不会改变他的路径
- 如果目标没有移动,则速度等于0
- 如果需要,可以延迟弹丸启动
感谢您的帮助!
算法一:调整启动时间
如果目标沿直线直接远离发射器,计算弹丸所需的时间。
计算经过该时间后目标所在的位置。
计算弹丸到达该点所需的距离和时间。
适当延迟发布。
缺点:如果目标直接向发送者移动并且初始距离很远,则此算法可能会产生很长的延迟。
如果延迟太大,您可能需要重新计算,并使用较早的罢工时间。
算法二:调整弹丸速度
使用您链接的算法找到罢工时间。
计算目标当时的位置。
设置弹丸速度,使其与目标同时到达打击点。弹丸速度应在发射时确定。
缺点:如果目标立即转向或远离发射器,射弹的速度可能与正常速度明显不同。
我更喜欢算法2。我认为玩家会欣赏弹丸立即开始跋涉。如果您使用算法 1,游戏可能看起来没有响应。我不认为偶尔的 slow/fast 射弹会打扰到玩家。
你快到了。
用对象到达那里的时间注释对象路径中的每个步骤(应该是 length/speed)。
接下来取路径的每一段并假设目标仅沿着该段移动并使用您找到的答案找出它会相交的位置。有3个选项。
- 您击中了该段内某处的目标。这就是您正在寻找的解决方案。
- 您将在该段结束后击中目标。这意味着您距离太远,因此无法在目标行驶该特定路段时击中目标。您需要尝试路径的下一段。
- 您会在分段的起点之前击中目标。这意味着该段相对较近,您应该可以随时击中目标。您可以确定这是一个解决方案,并为您的镜头添加一些延迟,以便目标位于片段内,或者尝试上一个片段。
鉴于以上情况,我将从目标路径的第一段开始。如果你不能在那里击中目标,请尝试下一个,直到找到一个你可以击中目标的地方。这将是目标在射程内的第一个位置,因此射击应该没有延迟。