中心を軸に回転する
CoddyのPygameジャーニー「スプライトと画像」セクションの一部。レッスン 6/36。
船を回転させるには、回転した画像が必要です。pygame.transform.rotate(image, angle)は新しいSurfaceを返します。これは画像をangle度反時計回りに回転させたものです。負の角度では時計回りに回転します。元の画像は変わりません。
回転した正方形は同じ大きさの正方形には収まらないため、新しいSurfaceは大きくなります。船を45度回転させると、90×90ピクセルになります。以前の左上の角にブリットすると、中央が下と右に移動します。回転させると、船はウィンドウ内で揺れ動いてしまいます。
代わりに、中央の位置をそのまま保ちます。回転した画像に、同じ点を中心とするRectを取得します。
rotated = pygame.transform.rotate(ship, angle)
rotated_rect = rotated.get_rect(center=(320, 240))
screen.blit(rotated, rotated_rect)各フレームで、元のshipをangle全体の角度だけ回転させます。船の向きはangleの数値で表され、画像はその値をもとに作られます。
チャレンジ
中級- ループの前に、
angle = 0にします。 - 左キーを押し続けると、各フレームで
angleに3を加算し(反時計回り)、右キーを押し続けると3を減算します。 - 各フレームで、
shipをangleだけ回転させ、中心が(320, 240)になるように結果を描画します。
自分で試してみよう
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Turn the Ship")
clock = pygame.time.Clock()
ship = pygame.image.load("assets/images/ship.png").convert_alpha()
ship_rect = ship.get_rect(center=(320, 240))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((20, 22, 40))
screen.blit(ship, ship_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
スプライトと画像のすべてのレッスン
自分で練習してみよう: Pygameプレイグラウンド