2012-09-19 48 views
0

我设法让敌人的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

感谢您的答案,他们都非常好:)我有点卡住,但我得到的结果是:0.130292159729的角度,但不可能是正确的吗?我看不到任何精灵旋转:/ – user1237200

+1

也许你需要将结果转换成度; 'math.atan2(y,x)/ math.pi * 180' – wrongite

+0

是的,这是谢谢。 – user1237200

回答

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) 
2

使用math.atan2()与delta y和x会给你适当的角度弧度。

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