画像を拡大縮小する
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)を指定すると、大きなボスが中央からずれてしまいます。
チャレンジ
簡単- ループの前にボスを2倍に拡大し、拡大した画像から、中心を
(320, 150)にしたboss_rectを作ります。 - 船を
(32, 32)に拡大して、iconを作ります。 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プレイグラウンド