AI射弹瞄准,发射火箭/子弹/等。这样它就可以拦截一个目标

时间:2014-05-24 08:08:18

标签: python artificial-intelligence

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

tx = target_pos.x - self.pos.x
ty = target_pos.y - self.pos.y
tvx = target_vel.x
tvy = target_vel.y

# Get quadratic equation components
a = tvx*tvx + tvy*tvy - self.max_speed * self.max_speed
b = 2 * (tvx * tx + tvy * ty)
c = tx*tx + ty*ty

# Solve quadratic
ts = self.quad(a, b, c); # See quad(), below

# Find smallest positive solution
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

这是有效的,除了它只在射击者被放置在屏幕的右下方时才起作用(它是一个自上而下的游戏,有一个射手和一个移动目标)。通过这种设置,射手总是会击中,但是如果我将射击者移动到屏幕的中间位置,射手只有在目标位于射击者右侧时才能正确射击射弹,否则它只会向前射击。以下是一些屏幕截图链接来说明问题。

Accurate (shooter can't be seen in bottom left)

Inaccurate

可以看出,射弹的矢量很好,出于某种原因,它只是没有跟随它。

Projectile vector

1 个答案:

答案 0 :(得分:0)

知道了!只需改变最后一行就可以考虑到射击者的位置。

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