如何从敌人那里找到玩家的方向?

时间:2012-09-19 08:20:14

标签: python pyglet game-ai

我设法让敌人ai使用此代码(python和pyglet)向玩家移动:

(dx, dy) = ((player.x - self.x)/math.sqrt((player.x - self.x) ** 2 + 
           (player.y - self.y) ** 2),(player.y - self.y)/math.sqrt((player.x - self.x)
           ** 2 + (player.y - self.y) ** 2))
newCoord = (self.x + dx * 3, self.y + dy * 3)
self.x,self.y = newCoord

但是我不确定如何旋转敌人精灵让他们面对玩家。我很确定我可以使用上面的一些代码并相应地旋转播放器,但我找不到一种有效的方法。

2 个答案:

答案 0 :(得分:3)

您拥有的信息是直角三角形的两条腿,您正试图找到该角度。所以

math.tan(angle) == float(player.y - self.y) / (player.x - self.x)

angle == math.atan(float(player.y - self.y) / (player.x - self.x))

但是这个atan会丢失签名信息,而划分可能会给你ZeroDivisionError,这正是math.atan2的用途:

angle = math.atan2(player.y - self.y, player.x - self.x)

答案 1 :(得分:2)

math.atan2()与delta y和x一起使用将为您提供适当的弧度角度。

>>> math.atan2(1, -1)
2.356194490192345