0

我已经设法使用以下代码(python 和 pyglet)让敌人 AI 向玩家移动:

(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

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

4

2 回答 2

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)
于 2012-09-19T08:33:16.657 回答
2

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

>>> math.atan2(1, -1)
2.356194490192345
于 2012-09-19T08:29:59.017 回答