首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确编写导弹寻路程序?

如何正确编写导弹寻路程序?
EN

Stack Overflow用户
提问于 2013-03-06 06:36:05
回答 3查看 1K关注 0票数 0

我目前正在编写一个塔防御程序,导弹倾向于错过敌人,而不是像桌面塔防御那样跟踪/打击敌人。这是因为他们在不给敌人任何线索的情况下进行射击,所以当它到达敌人的位置时,敌人已经在3-5个像素之外了。我查找了一下如何解决这个问题,发现我需要使用向量数学来解决这个问题。例如,这个网站的http://www.helixsoft.nl/articles/circle/sincos.htm有一些关于如何编程制导导弹的代码,但我不确定这是否是我解决问题所需的那种数学。

stackoverflow上的帖子似乎推荐了一个叫做"Command Guidance“的东西,但不知道在2d游戏中是如何工作的。

所以现在,我很困惑该怎么做。任何方向/指导都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-06 07:01:46

听起来你已经有了可以正确打击敌人的代码,如果他们是静止的,只有当导弹在飞行时他们会移动才是问题所在。

为什么你不简单地“重新发射”导弹从它的当前位置到敌人的新位置,每当敌人迈出一步,或者导弹每移动10个像素左右。

这将导致导弹对飞行中的敌人进行“寻的”,而不是预测在导弹应该到达时敌人将在哪里。

不同的是,“寻的”应该导致每次命中,而预测性方法将允许敌人在导弹飞行时通过改变行走方向来躲避导弹。你更喜欢哪一个是设计决定,但我认为通常的塔防御游戏使用归位方法。

票数 1
EN

Stack Overflow用户

发布于 2013-03-06 06:50:31

这篇文章正是你所需要的,阅读关于制导导弹的部分,只需使用逆切函数即可。

票数 1
EN

Stack Overflow用户

发布于 2013-03-06 07:14:22

你需要“预测”你敌人的方向。假设它沿着直线移动,塔需要观察它的目标的速度和方向。

假设您的塔位于点(0,0)中,您收集了目标的两个观测值:

t=1

  • (100,100) at t=0
  • (90,95)

速度:首先计算这两个点之间的距离:

代码语言:javascript
复制
 d = sqrt((x2-x1)^2 + (y2 - y1)^2) =
   = sqrt(10^2 + 5^2) = sqrt(125) = 11.18034

所以你的目标速度是11.18034 (因为你在一个时间单位的时间间隔内进行了观察)

角度:一点几何体。轨迹的斜率为:

代码语言:javascript
复制
 m = (y2 - y1) / (x2 - x1) =
   = 5 / 10 = 0.5

所以角度是:

代码语言:javascript
复制
 theta = arctan(0.5) = 0.463648 radians (or 26.56 degrees)

有了两个点和斜率,你可以估计你的目标的轨迹:

代码语言:javascript
复制
 y - y1 = m * (x - x1)
 ==> y = 0.5 * (x - 100) + 100 =
       = 0.5 * x + 50

剩下的就是计算你的导弹可以拦截目标的点。为此,您需要知道您的导弹的速度,然后计算“最佳”拦截点。我把这第二步留给你来做。它是简单的几何图形(还有一点创造力)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15235502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档