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