Pokud jste herní vývojáři používající knihovnu Pygame, pravděpodobně jste narazili na třídu Sprite. Třída Sprite je výkonný nástroj pro vytváření herních postav, které můžete na obrazovce snadno přesouvat, otáčet a měnit velikost.
Pomocí jednoduchého programu Python se můžete dozvědět o procesu vytváření herních postav založených na spritech v Pygame. Zjistěte, jak vytvořit základní třídu Sprite a poté přidat atributy a metody pro ovládání chování.
Úvod do Pygame's Sprite Class
Třída Sprite v Pygame je kontejnerová třída, která obsahuje všechny atributy a chování herní postavy. Odvozuje se od třídy Surface Pygame, která představuje obrázek s pevnou šířkou a výškou.
Abyste s ním mohli pracovat, budete muset vytvořit novou třídu, která zdědí třídu Sprite, a definovat všechny atributy a metody, které chcete, aby vaše herní postava měla.
Vytvoření základní třídy sprite pro herní postavu
První, nainstalujte modul pygame pomocí pip. Udělejte to pomocí tohoto příkazu:
pip Nainstalujte pygame
Chcete-li vytvořit základní sprite, budete muset importovat třídu Sprite z Pygame a vytvořit novou třídu, která z ní zdědí. Poté můžete definovat jakékoli atributy a metody, které chcete, aby vaše herní postava měla.
Můžete například chtít vytvořit třídu Sprite pro hráčskou postavu, která se může pohybovat po obrazovce doleva a doprava. Chcete-li to provést, můžete definovat následující atributy:
- pozice: N-tice, která drží souřadnice x a y spritu na obrazovce.
- rychlost: Tuple, která drží rychlost, kterou se sprite pohybuje horizontálně a vertikálně.
A následující metody:
- Aktualizace(): Metoda, která aktualizuje polohu spritu na základě jeho rychlosti.
- kreslit(): Metoda, která vykreslí sprite na obrazovku.
Zde je příklad základní třídy Sprite, která implementuje tyto atributy a metody:
import pygame
třídaHráč(pygame.sprite. Skřítek):
def__init__(self, x, y, velocity_x, velocity_y):
super().__init__()
já.position = (x, y)
já.velocity = (rychlost_x, rychlost_y)
defAktualizace(já):
já.position = (já.pozice[0] + já.rychlost[0], já.pozice[1] + já.rychlost[1])
defkreslit(vlastní, povrch):
pygame.kreslit.kruh(povrch, (255, 0, 0), já.pozice, 10)
Metoda __init__ je speciální metoda ve třídách Pythonu který se spustí, když vytvoříte instanci třídy. Můžete jej použít k inicializaci atributů instance.
V tomto kódu používá metoda __init__ třídy Player čtyři argumenty: x, y, velocity_x a velocity_y. Tyto argumenty nastavují počáteční pozici a rychlost skřítka hráče.
Metoda __init__ také volá metodu super().__init__(), což je metoda __init__ nadřazené třídy Sprite. To je nutné, protože třída Player je podtřídou třídy Sprite a metoda __init__ třídy Sprite nastavuje některé atributy, které potřebují všichni sprite.
Přidání atributů a metod ke kontrole chování
Nyní, když máte základní třídu Sprite, můžete přidat atributy a metody pro ovládání chování vaší herní postavy. To může zahrnovat věci jako pohyb, útok, skákání a další.
Chcete-li přidat tyto atributy a metody, budete se muset zamyslet nad tím, jaké akce chcete ve hře znak, abyste mohli provádět, a definovat odpovídající atributy a metody ve vašem Sprite třída.
Můžete například chtít přidat metodu pro ovládání pohybu spritu, jako je metoda move_left(), která sníží rychlost spritu na ose x.
Zde je příklad upravené třídy Sprite, která obsahuje tyto další atributy a metody:
třídaHráč(pygame.sprite. Skřítek):
def__init__(self, x, y, velocity_x, velocity_y):
super().__init__()
já.position = (x, y)
já.velocity = (rychlost_x, rychlost_y)
defAktualizace(já):
já.position = (já.pozice[0] + já.rychlost[0], já.pozice[1] + já.rychlost[1])
defkreslit(vlastní, povrch):
pygame.kreslit.kruh(povrch, (255, 0, 0), já.pozice, 10)
defpohyb doleva(já):
já.velocity = (-1, já.rychlost[1])
defpohyb vpravo(já):
já.velocity = (1, já.rychlost[1])
Chcete-li použít třídu Player ve své hře Pygame, budete muset vytvořit instanci třídy a podle potřeby volat její metody.
Začněte vytvořením okna a instance sprite Player:
# Inicializujte Pygame
pygame.init()# Nastavte velikost okna
velikost_okna = (640, 480)# Vytvořte okno
okno = pygame.display.set_mode (velikost_okna)
# Vytvořte skřítka hráče
hráč = hráč (320, 240, 0, 0)
Poté definujte hlavní herní smyčku, která zpracovává události na klávesnici a aktualizace a kreslí skřítka. Když stisknete levou nebo pravou šipku, sprite se bude pohybovat v odpovídajícím směru.
# Hlavní herní smyčka
zatímcoSkutečný:
# Zvládněte události
pro událost v pygame.event.get():
-li event.type == pygame. PŘESTAT:
pygame.quit()
sys.exit()
-li event.type == pygame. KEYDOWN:
-li event.key == pygame. K_LEFT:
player.move_left()
elif event.key == pygame. K_RIGHT:
player.move_right()
# Aktualizujte sprite hráče
player.update()
# Vyčistěte okno
window.fill((255, 255, 255))
# Nakreslete skřítka hráče
player.draw (okno)
# Aktualizujte displej
pygame.display.update()
S výsledným programem budete moci ovládat skřítka hráče a sledovat, jak se kreslí na obrazovku v různých pozicích:
Načítání a zobrazování grafiky Sprite pomocí obrazového modulu
Nyní, když máte základní třídu Sprite s atributy a metodami pro ovládání chování, pravděpodobně budete chtít do svého sprite přidat nějakou grafiku. Obrazový modul Pygame usnadňuje načítání a zobrazování obrázků na obrazovce.
Chcete-li načíst obrázek, budete muset použít funkci pygame.image.load(), která vezme cestu k souboru jako argument a vrátí objekt Surface. Tento objekt Surface pak můžete přiřadit atributu sprite, jako je self.image, který můžete použít k nakreslení sprite na obrazovku.
Zde je například postup, jak můžete načíst obrázek a přiřadit jej ke spritu:
import pygame
třídaHráč(pygame.sprite. Skřítek):
def__init__(self, x, y, velocity_x, velocity_y, image_path):
super().__init__()
já.position = (x, y)
já.velocity = (rychlost_x, rychlost_y)
já.image = pygame.image.load (cesta k obrázku)
defAktualizace(já):
já.position = (já.pozice[0] + já.rychlost[0], já.pozice[1] + já.rychlost[1])
defkreslit(vlastní, povrch):
povrch.blit(já.obraz, já.pozice)
defpohyb doleva(já):
já.velocity = (-1, já.rychlost[1])
defpohyb vpravo(já):
já.velocity = (1, já.rychlost[1])
Tento kód definuje třídu Player, která rozšiřuje třídu Sprite Pygame a zahrnuje atributy pro pozici, rychlost a obrázek, stejně jako metody pro aktualizaci polohy skřítka, přikreslení skřítka na obrazovku a ovládání hnutí.
Můžete se podívat na toto Úložiště GitHub pro úplný kód!
Zlepšete správu sprite pomocí třídy Sprite
Třída Sprite poskytuje pohodlný kontejner pro všechny atributy a chování herní postavy, což usnadňuje aktualizaci, kreslení a ovládání sprite na obrazovce.
Zavedením třídy Sprite do vaší hry Pygame můžete zlepšit celkový zážitek pro své hráče a zefektivnit proces vývoje pro sebe.