Menu
CoddyTech

Skaluj obraz

Część sekcji Sprite’y i obrazy ścieżki Pygame w Coddy. Lekcja 8 z 36.

Boss poziomu powinien wyglądać na dużego, a licznik żyć potrzebuje małych statków. Te same pliki mogą służyć do obu celów: skalowanie tworzy kopię o zmienionym rozmiarze.

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

scale_by(image, 2) mnoży oba wymiary przez 2: boss o wymiarach 64 na 64 staje się obrazem o wymiarach 128 na 128. scale(image, (w, h)) nadaje obrazowi dokładnie wymiary w na h pikseli, nawet jeśli go rozciąga.

Skalowanie jest powolne w porównaniu z blitowaniem, a każda kolejna kopia nieco bardziej rozmywa piksele lub sprawia, że stają się kanciaste. Skaluj obraz tylko raz, przed pętlą, na podstawie oryginalnego pliku, a następnie rysuj przeskalowaną kopię w każdej klatce.

Utwórz Rect po skalowaniu. Rect utworzony na podstawie obrazu o wymiarach 64 na 64 miałby stary rozmiar, a center=(320, 150) umieściłoby dużego bossa poza środkiem.

challenge icon

Wyzwanie

Łatwy
  1. Powiększ bossa 2 razy przed pętlą, a następnie utwórz boss_rect ze przeskalowanego obrazu, wyśrodkowany w punkcie (320, 150).
  2. Utwórz icon: statek przeskalowany do (32, 32).
  3. Narysuj icon trzy razy, z lewym górnym rogiem w punktach (10, 10), (50, 10) i (90, 10).

Spróbuj swoich sił

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()

Wszystkie lekcje w sekcji Sprite’y i obrazy

Poćwicz samodzielnie: Edytor online Pygame