これで一日中働いていて、私はそのロジックを見つけられませんでした。Pygame - 宇宙船を回転させて動かす(ポリゴン)
私は古典的なスタイルの小惑星ゲームを作りたいと思っています。私は宇宙船から始まります。
知っている今、重要な事柄:
import pygame
import colors
from helpers import *
class Ship :
def __init__(self, display, x, y) :
self.x = x
self.y = y
self.width = 24
self.height = 32
self.color = colors.green
self.rotation = 0
self.points = [
#A TOP POINT
(self.x, self.y - (self.height/2)),
#B BOTTOM LEFT POINT
(self.x - (self.width/2), self.y + (self.height /2)),
#C CENTER POINT
(self.x, self.y + (self.height/4)),
#D BOTTOM RIGHT POINT
(self.x + (self.width/2), self.y + (self.height/2)),
#A TOP AGAIN
(self.x, self.y - (self.height/2)),
#C A NICE LINE IN THE MIDDLE
(self.x, self.y + (self.height/4)),
]
def move(self, strdir) :
dir = 0
if strdir == 'left' :
dir = -3
elif strdir == 'right' :
dir = 3
self.points = rotate_polygon((self.x, self.y), self.points, dir)
def draw(self, display) :
stroke = 2
pygame.draw.lines(display, self.color, False, self.points, stroke)
船は次のようになります。私は宇宙船の形でいくつかの線を描画してやった
タプル(self.x、self.y)は、宇宙船の真ん中です。どのように私はそれが前方または後方に移動することができます:それは問題があり、キーAとD
def rotate_polygon(origin, points, angle) :
angle = math.radians(angle)
rotated_polygon = []
for point in points :
temp_point = point[0] - origin[0] , point[1] - origin[1]
temp_point = (temp_point[0] * math.cos(angle) - temp_point[1] * math.sin(angle),
temp_point[0] * math.sin(angle) + temp_point[1] * math.cos(angle))
temp_point = temp_point[0] + origin[0], temp_point[1] + origin[1]
rotated_polygon.append(temp_point)
return rotated_polygon
を使用して、コマンドに私が回転するために管理し、この機能(スピン)を使用して
宇宙船が向いている方向に?
OR
どのように私はself.xとself.y値を更新し、self.pointsリスト内でそれらを更新して回転を維持することができますか?
最も単純で効率の低いオプションは、self.xまたはself.yへの更新後にこれらの頂点を単純にすべて再計算することです。 – AndrewGrant