Menu
CoddyTech

中心を軸に回転する

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の数値で表され、画像はその値をもとに作られます。

challenge icon

チャレンジ

中級
  1. ループの前に、angle = 0にします。
  2. 左キーを押し続けると、各フレームでangleに3を加算し(反時計回り)、右キーを押し続けると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プレイグラウンド