AI弹道瞄准,发射火箭/子弹等以拦截目标

我知道这个问题之前已经问过了,我基本上已经让它工作了。我使用了在这里和其他地方找到的代码:

tx = target_pos.x - self.pos.xty = target_pos.y - self.pos.ytvx = target_vel.xtvy = target_vel.y# 获取二次方程的组成部分a = tvx*tvx + tvy*tvy - self.max_speed * self.max_speedb = 2 * (tvx * tx + tvy * ty)c = tx*tx + ty*ty# 解二次方程ts = self.quad(a, b, c); # 见下面的quad()# 找到最小的正解desired_vel = None;if (ts):    t0 = ts[0]    t1 = ts[1]    t = min(t0, t1)    if (t < 0):        t = max(t0, t1)      if (t > 0):        desired_vel = Vector2D(target_pos.x + target_vel.x*t,target_pos.y + target_vel.y*t) * self.max_speed

这个方法有效,但仅当射手位于屏幕的右下角时有效(这是一个自上而下的游戏,有一个射手和一个移动目标)。在这种设置下,射手总是能击中目标,但如果我将射手移动到屏幕的底部中间位置,射手只有在目标位于射手右侧时才能正确发射弹丸,否则它只会向前直射。这里有一些截图链接来说明这个问题。

准确(射手在左下角看不见)

不准确

可以看出,弹丸的矢量是正确的,但不知为何它没有跟随这个矢量。

弹丸矢量


回答:

明白了!只需要更改最后一行以考虑射手的位置即可。

desired_vel = Vector2D( (target_pos.x + target_vel.x * t) - shooter.pos.x, (target_pos.y + target_vel.y*t) - shooter.pos.y ) * self.max_speed

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注