私はPygameを使ってPythonでゲームを書いています。
(私の表示ウィンドウの)座標は
( 0 , 0 )
左上と
(640,480)
右下にあります。
角度は
0°
、上向きの
90°
とき、右向きのときです。
中央に位置するプレイヤースプライトがあり、銃の砲塔がプレイヤーの方を向くようにします。どうすればいいのですか?
と言う
x1
、、y1
は砲塔の座標
x2
でy2
あり、プレーヤーの座標
a
は角度の尺度です
まず、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
あなたが探しているものでなければなりません。
三角形を考える
sin(angle)=opposed side / hypotenuse
あなたはおそらくこのようなものが欲しいでしょう - あなたは少しいじる必要があるかもしれません - 私は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
OK、あなたの答えと他のウェブサイトを組み合わせて使用すると、動作するコードが見つかりました:
dx,dy = x2-x1,y2-y1
rads = math.atan2(dx/dy)
degs = math.degrees(rads)
私のコードの残りの部分は、degs の負の値についてうるさくありません。とにかく、今はうまくいっています。あなたの助けに感謝したいと思います。