Menu
CoddyTech

画像を拡大縮小する

CoddyのPygameジャーニー「スプライトと画像」セクションの一部。レッスン 8/36。

レベルのボスは大きく表示し、ライフカウンターには小さな船が必要です。同じファイルでどちらもできます。拡大縮小すると、サイズを変更したコピーが作られます。

boss = pygame.transform.scale_by(boss, 2)
icon = pygame.transform.scale(ship, (32, 32))

scale_by(image, 2)は縦横をそれぞれ2倍にします。64×64のボスは128×128になります。scale(image, (w, h))は、画像が引き伸ばされる場合でも、サイズを正確にw×hピクセルにします。

拡大縮小はblitより処理に時間がかかり、新しいコピーを作るたびにピクセルが少しずつぼやけたり、ギザギザになったりします。ループの前に、元のファイルから一度だけ拡大縮小し、毎フレームそのコピーを描画しましょう。

拡大縮小した後にRectを作成しましょう。64×64の画像から作ったRectは元のサイズのままなので、center=(320, 150)を指定すると、大きなボスが中央からずれてしまいます。

challenge icon

チャレンジ

簡単
  1. ループの前にボスを2倍に拡大し、拡大した画像から、中心を(320, 150)にしたboss_rectを作ります。
  2. 船を(32, 32)に拡大して、iconを作ります。
  3. iconを3回描画し、左上の位置を(10, 10)、(50, 10)、(90, 10)にします。

自分で試してみよう

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Boss Fight")
clock = pygame.time.Clock()

boss = pygame.image.load("assets/images/boss.png").convert_alpha()
boss_rect = boss.get_rect(center=(320, 150))
ship = pygame.image.load("assets/images/ship.png").convert_alpha()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((20, 22, 40))
    screen.blit(boss, boss_rect)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

スプライトと画像のすべてのレッスン

自分で練習してみよう: Pygameプレイグラウンド