Pygame projekty postrádající animaci mohou být neuvěřitelně nudné. Zvyšte přitažlivost svých her začleněním podmanivých animací.

Animace je zásadním aspektem vývoje hry, který do vašich výtvorů vnáší život a dynamiku. Začleněním animací můžete pro své hráče vytvořit podmanivé vizuální prvky a pohlcující herní zážitky.

Pygame poskytuje komplexní sadu nástrojů, které zjednodušují proces vytváření animací. Poskytuje vestavěné funkce včetně načítání a zobrazování snímků, ovládání animací pomocí vstupu přehrávače a tak dále.

Vytvořte jednoduchou hru

Začněte vytvořením jednoduché hry, která umožňuje hráči pohybovat se doleva a doprava. Do hry můžete přidat i platformu.

Kód použitý v tomto článku je k dispozici v tomto úložiště GitHub a můžete jej používat zdarma pod licencí MIT.

Vytvořte nový soubor jednoduchá hra.py a definovat některé proměnné, včetně počátečních pozic a rychlostí pro hráče a platformu. Tyto proměnné budou použity k ovládání pohybu skřítka hráče.

Zvládněte vstup hráče načtením stavu klávesnice pomocí

instagram viewer
pygame.key.get_pressed(). Pokud stisknete tlačítko se šipkou doleva, můžete snížit hodnotu hráč_xa pokud stisknete klávesu se šipkou vpravo, můžete ji zvýšit. To vytváří pohybový efekt pro hráčova skřítka.

Vaše počáteční hra by měla vypadat následovně:

Načítání a zobrazování rámců

Chcete-li vytvořit animace, načíst a zobrazit různé obrázky nebo snímky animace. Každý snímek představuje konkrétní obrázek nebo sprite, který se zobrazí v sekvenci, aby navodil iluzi pohybu. Předpokládejme, že máte tři rámce: snímek0, rám1, a rám2. Zpočátku můžete zobrazit snímek0.

Vytvořte nový soubor s názvem animovat.py a přidejte kód s níže uvedenými aktualizacemi:


# Načíst rámy
frame0 = pygame. Povrch((20, 20))
frame0.fill((255, 0, 0))

frame1 = pygame. Povrch((20, 20))
frame1.fill((0, 255, 0))

frame2 = pygame. Povrch((20, 20))
frame2.fill((0, 0, 255))

# Nastavte počáteční snímek
aktuální_rámec = snímek0

# Herní smyčka
zatímco běh:
# ...

# Renderujte hru
# ...
screen.blit (aktuální_snímek, (hráč_x, hráč_y))

pygame.display.flip()

# ...

Ovládání animací pomocí vstupu přehrávače

Chcete-li animovat sprite hráče, můžete přepínat mezi různými snímky na základě vstupu hráče. Například, když se hráč pohybuje doleva nebo doprava pomocí kláves se šipkami, můžete iterovat mezi snímky a vytvořit iluzi pohybu.

# Herní smyčka
zatímco běh:
# ...

# Zvládněte vstup hráče
keys = pygame.key.get_pressed()
-li klíče [pygame. K_LEFT]:
player_x -= player_speed
aktuální_rámec = snímek1
elif klíče [pygame. K_RIGHT]:
player_x += player_speed
aktuální_rámec = snímek2
jiný:
aktuální_rámec = snímek0

# Renderujte hru
# ...
screen.blit (aktuální_snímek, (hráč_x, hráč_y))

pygame.display.flip()

# ...

Níže je výstup:

Včetně dalších funkcí

Kromě základní animační funkce nabízí Pygame několik dalších funkcí, které vylepší váš zážitek z vývoje hry.

Sprite listy

Místo načítání jednotlivých snímků můžete použít listy sprite, které obsahují více snímků v jednom obrazu. Pygame poskytuje funkce pro extrahování a zobrazení konkrétních oblastí listu sprite. Zde je příklad:

# Načtěte obrázek listu sprite
sprite_sheet = pygame.image.load("spritesheet.png")

# Definujte rozměry každého rámu
frame_width = 32
frame_height = 32

# Funkce pro extrahování snímků z listu sprite
defextrahovat_rámce(list, frame_width, frame_height):
# kód pro extrakci snímků

# Extrahujte snímky z listu sprite
frames = extract_frames (sprite_sheet, frame_width, frame_height)

# Zobrazte rámeček z listu sprite
aktuální_rámec = snímky[0]

# Herní smyčka
zatímco běh:
# ...
screen.blit (aktuální_snímek, (hráč_x, hráč_y))
# ...

Rychlost animace

Rychlost animací můžete ovládat zavedením časových prodlev mezi aktualizacemi snímků. To umožňuje plynulý a realistický pohyb. Zde je příklad toho, jak můžete ovládat rychlost animace za použití čas modul:

# Proměnné rychlosti animace
animation_delay = 100# Prodleva v milisekundách mezi aktualizacemi snímků
last_frame_time = pygame.time.get_ticks()

# Herní smyčka
zatímco běh:
# ...

# Zkontrolujte, zda uplynul dostatek času k aktualizaci rámce
aktuální_čas = pygame.time.get_ticks()
-li current_time - last_frame_time >= animation_delay:
# Aktualizujte rám

# Renderujte hru
# ...
screen.blit (aktuální_snímek, (hráč_x, hráč_y))

pygame.display.flip()

Detekce kolize

Pygame nabízí funkce detekce kolizí pro detekci interakcí mezi animovanými objekty, jako např detekce, když se hráč střetne s plošinou. Zde je příklad, jak začlenit detekci kolizí do vaší hry:

# Detekce kolize
defcheck_collision(player_rect, platform_rect):
-li player_rect.colliderect (platform_rect):
# Došlo ke kolizi
vrátit seSkutečný
jiný:
vrátit seNepravdivé

# Herní smyčka
zatímco běh:
# ...

# Proveďte detekci kolize
player_rect = pygame. Rect (player_x, player_y, 20, 20)
platform_rect = pygame. Obdélník (platforma_x, platforma_y,
platform_width, platform_height)

-li check_collision (player_rect, platform_rect):
# Kolize rukojeti

# Renderujte hru
# ...
screen.blit (aktuální_snímek, (hráč_x, hráč_y))

pygame.display.flip()

Využitím těchto dalších funkcí můžete rozšířit své možnosti vývoje her a vytvořit dynamičtější a pohlcující herní zážitky. Experimentujte s různými technikami, kreativně je kombinujte a nechejte se vést svou fantazií při vytváření skutečně poutavých her.

Nejlepší postupy pro vytváření animací v Pygame

Při přidávání animací do svých projektů Pygame je důležité dodržovat některé osvědčené postupy, abyste optimalizovali svou implementaci a zajistili plynulé a efektivní animace. Zvažte následující pokyny:

Předběžně načíst a uložit snímky do paměti

Načítání obrázků z disku během herní smyčky může způsobit zpoždění a ovlivnit výkon. Abyste tomu zabránili, načtěte si snímky a uložte je do paměti před zahájením herní smyčky. Tímto způsobem můžete rychle přistupovat k rámcům a zobrazovat je za běhu bez jakékoli režie diskových I/O.

Využijte vestavěné třídy Sprite a Animation Pygame

Pygame poskytuje vestavěné třídy jako pygame.sprite. Skřítek a pygame.sprite. Skupina což zjednodušuje správu sprajtů a animací. Využitím těchto tříd můžete efektivněji zpracovávat detekci kolizí, aktualizace skupin a vykreslování.

Optimalizujte obrazové formáty

Zvažte optimalizaci formátů obrázků pro lepší výkon. Pygame podporuje různé formáty obrázků, včetně PNG a JPEG. PNG se obecně doporučuje pro obrázky s průhledností, zatímco JPEG je vhodný pro statické obrázky bez průhlednosti.

Experimentujte s různými formáty obrázků a úrovněmi komprese, abyste našli optimální rovnováhu mezi kvalitou obrázku a velikostí souboru.

Používejte správné snímkové frekvence

Pro dosažení plynulých animací je důležité nastavit vhodnou snímkovou frekvenci. Pygame poskytuje pygame.time. Hodiny třídy, která pomáhá řídit snímkovou frekvenci regulací rychlosti herní smyčky.

Zavoláním na klíště() metodou objektu Clock na konci každé iterace můžete zachovat konzistentní snímkovou frekvenci. Upravte snímkovou frekvenci na základě složitosti vašich animací a výkonnostních možností vaší cílové platformy.

Dodržováním těchto osvědčených postupů můžete optimalizovat implementaci animací, zlepšit výkon svých her a vytvořit pro své hráče vizuálně přitažlivé a poutavé zážitky.

Udělejte si hry zábavnější s animacemi

Přidání animace do vašich her může výrazně zlepšit celkový zážitek z hráče. Animace oživují postavy a předměty, díky čemuž jsou pohyby plynulejší a poutavější. Ať už se jedná o skákání postavy, útok nepřátel nebo interakci objektů, animace udělají váš herní svět pohlcujícím a vizuálně přitažlivějším.

Využitím animačních schopností Pygame můžete zaujmout své hráče a vytvářet hry, které zanechají trvalý dojem.