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

あなたが持っている情報は直角三角形の2本の足であり、あなたは角度を見つけようとしています。それで

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

デルタyおよびxとともに使用math.atan2()すると、ラジアン単位で適切な角度が得られます。

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