6

私はPygameを使ってPythonでゲームを書いています。
(私の表示ウィンドウの)座標は
( 0 , 0 )左上と
(640,480)右下にあります。

角度は
、上向きの
90°とき、右向きのときです。

中央に位置するプレイヤースプライトがあり、銃の砲塔がプレイヤーの方を向くようにします。どうすればいいのですか?
と言う
x1、、y1は砲塔の座標
x2y2あり、プレーヤーの座標
aは角度の尺度です

4

4 に答える 4

27

まず、math便利なatan2(denominator, numerator)機能があります。通常は使用しますatan2(dy,dx)が、Pygame はデカルト座標に対して y 軸を反転させるため (ご存じのとおり)、負の値を作成してdy負の角度を避ける必要があります。(「dy」は単に「y の変化」を意味します。)

from math import atan2, degrees, pi
dx = x2 - x1
dy = y2 - y1
rads = atan2(-dy,dx)
rads %= 2*pi
degs = degrees(rads)

degsあなたが探しているものでなければなりません。

于 2012-05-06T21:11:13.193 に答える
2

三角形を考える

sin(angle)=opposed side / hypotenuse
于 2012-05-06T20:23:31.937 に答える
1

あなたはおそらくこのようなものが欲しいでしょう - あなたは少しいじる必要があるかもしれません - 私は180度ずれているかもしれません. また、dy==0 の状況を特殊なケースにする必要がありますが、これは私が行っていません。

import math
# Compute x/y distance
(dx, dy) = (x2-x1, y2-y1)
# Compute the angle
angle = math.atan(float(dx)/float(dy))
# The angle is in radians (-pi/2 to +pi/2).  If you want degrees, you need the following line
angle *= 180/math.pi
# Now you have an angle from -90 to +90.  But if the player is below the turret,
# you want to flip it
if dy < 0:
   angle += 180
于 2012-05-06T20:37:39.830 に答える
-4

OK、あなたの答えと他のウェブサイトを組み合わせて使用​​すると、動作するコードが見つかりました:

dx,dy = x2-x1,y2-y1

rads = math.atan2(dx/dy)
degs = math.degrees(rads)

私のコードの残りの部分は、degs の負の値についてうるさくありません。とにかく、今はうまくいっています。あなたの助けに感謝したいと思います。

于 2012-05-19T11:37:58.923 に答える