Menu
CoddyTech

Изменение масштаба изображения

Часть раздела Спрайты и изображения путешествия по Pygame на Coddy. Урок 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 после масштабирования. Rect, созданный для изображения размером 64 на 64, будет старого размера, а center=(320, 150) разместит большого босса не по центру.

challenge icon

Задание

Легко
  1. Увеличь босса в 2 раза перед циклом, затем создай boss_rect на основе масштабированного изображения, разместив его по центру в точке (320, 150).
  2. Создай icon: изображение корабля, масштабированное до (32, 32).
  3. Нарисуй icon три раза, разместив его верхний левый угол в точках (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