Ak ste vývojár hier a používate knižnicu Pygame, pravdepodobne ste sa stretli s triedou Sprite. Trieda Sprite je výkonný nástroj na vytváranie herných postáv, ktoré môžete jednoducho presúvať, otáčať a meniť ich veľkosť na obrazovke.
Pomocou jednoduchého programu Python sa môžete dozvedieť o procese vytvárania herných postáv založených na sprite v Pygame. Zistite, ako vytvoriť základnú triedu Sprite a potom pridať atribúty a metódy na ovládanie správania.
Úvod do triedy Sprite v Pygame
Trieda Sprite v Pygame je kontajnerová trieda, ktorá obsahuje všetky atribúty a správanie hernej postavy. Je odvodená od triedy Surface Pygame, ktorá predstavuje obrázok s pevnou šírkou a výškou.
Aby ste s ňou mohli pracovať, budete musieť vytvoriť novú triedu, ktorá zdedí triedu Sprite, a definovať všetky atribúty a metódy, ktoré chcete, aby vaša herná postava mala.
Vytvorenie základnej triedy sprite pre hernú postavu
Najprv, nainštalujte modul pygame pomocou pip. Urobte to pomocou tohto príkazu:
pip Inštalácia pygame
Na vytvorenie základného sprite budete musieť importovať triedu Sprite z Pygame a vytvoriť novú triedu, ktorá z nej zdedí. Potom môžete definovať akékoľvek atribúty a metódy, ktoré chcete, aby vaša herná postava mala.
Môžete napríklad chcieť vytvoriť triedu Sprite pre postavu hráča, ktorá sa môže pohybovať po obrazovke doľava a doprava. Ak to chcete urobiť, môžete definovať nasledujúce atribúty:
- pozícia: N-tica, ktorá obsahuje súradnice x a y sprita na obrazovke.
- rýchlosť: Tuple, ktorá drží rýchlosť, ktorou sa sprite pohybuje horizontálne a vertikálne.
A nasledujúce metódy:
- aktualizovať(): Metóda, ktorá aktualizuje polohu sprita na základe jeho rýchlosti.
- kresliť(): Metóda, ktorá pritiahne sprite na obrazovku.
Tu je príklad základnej triedy Sprite, ktorá implementuje tieto atribúty a metódy:
importovať pygame
triedaHráč(pygame.sprite. sprite):
def__init__(self, x, y, velocity_x, velocity_y):
Super().__init__()
seba.position = (x, y)
seba.velocity = (rýchlosť_x, rýchlosť_y)
defaktualizovať(ja):
seba.pozícia = (seba.pozícia[0] + seba.rýchlosť[0], seba.pozícia[1] + seba.rýchlosť[1])
defkresliť(vlastný, povrch):
pygame.kresliť.kruh(povrch, (255, 0, 0), seba.pozícia, 10)
Metóda __init__ je špeciálna metóda v triedach Pythonu ktorý sa spustí, keď vytvoríte inštanciu triedy. Môžete ho použiť na inicializáciu atribútov inštancie.
V tomto kóde má metóda __init__ triedy Player štyri argumenty: x, y, velocity_x a velocity_y. Tieto argumenty určujú počiatočnú pozíciu a rýchlosť hráča sprite.
Metóda __init__ tiež volá metódu super().__init__(), čo je metóda __init__ nadradenej triedy Sprite. Je to potrebné, pretože trieda Player je podtriedou triedy Sprite a metóda __init__ triedy Sprite nastavuje niektoré atribúty, ktoré potrebujú všetci sprite.
Pridanie atribútov a metód na kontrolu správania
Teraz, keď máte základnú triedu Sprite, môžete pridať atribúty a metódy na ovládanie správania vašej hernej postavy. To môže zahŕňať veci ako pohyb, útok, skákanie a ďalšie.
Ak chcete pridať tieto atribúty a metódy, musíte sa zamyslieť nad tým, aké akcie chcete vo svojej hre znak, aby ste ho mohli vykonávať, a definujte zodpovedajúce atribúty a metódy vo vašom Sprite trieda.
Môžete napríklad chcieť pridať metódu na ovládanie pohybu spritu, ako je metóda move_left(), ktorá zníži rýchlosť spritu na osi x.
Tu je príklad upravenej triedy Sprite, ktorá obsahuje tieto dodatočné atribúty a metódy:
triedaHráč(pygame.sprite. sprite):
def__init__(self, x, y, velocity_x, velocity_y):
Super().__init__()
seba.position = (x, y)
seba.velocity = (rýchlosť_x, rýchlosť_y)
defaktualizovať(ja):
seba.pozícia = (seba.pozícia[0] + seba.rýchlosť[0], seba.pozícia[1] + seba.rýchlosť[1])
defkresliť(vlastný, povrch):
pygame.kresliť.kruh(povrch, (255, 0, 0), seba.pozícia, 10)
defmove_left(ja):
seba.velocity = (-1, seba.rýchlosť[1])
defpohnúť sa vpravo(ja):
seba.velocity = (1, seba.rýchlosť[1])
Ak chcete použiť triedu Player vo svojej hre Pygame, budete musieť vytvoriť inštanciu triedy a podľa potreby zavolať jej metódy.
Začnite vytvorením okna a inštancie sprite prehrávača:
# Inicializujte Pygame
pygame.init()# Nastavte veľkosť okna
veľkosť_okna = (640, 480)# Vytvorte okno
okno = pygame.display.set_mode (veľkosť_okna)
# Vytvorte hráča sprite
hráč = hráč(320, 240, 0, 0)
Potom definujte hlavnú hernú slučku, ktorá spracováva udalosti na klávesnici a aktualizácie a kreslí sprite. Keď stlačíte kláves so šípkou doľava alebo doprava, sprite sa bude pohybovať v príslušnom smere.
# Hlavná herná slučka
zatiaľ čoPravda:
# Zvládnite udalosti
pre udalosť v pygame.event.get():
ak event.type == pygame. UKONČIŤ:
pygame.quit()
sys.exit()
ak event.type == pygame. KEYDOWN:
ak event.key == pygame. K_LEFT:
player.move_left()
elif event.key == pygame. K_RIGHT:
player.move_right()
# Aktualizujte sprite hráča
player.update()
# Vyčistite okno
window.fill((255, 255, 255))
# Nakreslite sprite hráča
player.draw (okno)
# Aktualizujte displej
pygame.display.update()
S výsledným programom budete môcť ovládať škriatka hráča a sledovať, ako sa kreslí na obrazovku na rôznych pozíciách:
Načítanie a zobrazenie grafiky Sprite pomocou obrazového modulu
Teraz, keď máte základnú triedu Sprite s atribútmi a metódami na ovládanie správania, pravdepodobne budete chcieť do svojho sprite pridať nejakú grafiku. Obrazový modul Pygame uľahčuje načítanie a zobrazenie obrázkov na obrazovke.
Ak chcete načítať obrázok, budete musieť použiť funkciu pygame.image.load(), ktorá berie cestu k súboru ako argument a vracia objekt Surface. Potom môžete tento objekt Surface priradiť atribútu sprite, ako napríklad self.image, ktorý môžete použiť na nakreslenie sprite na obrazovku.
Tu je napríklad postup, ako môžete načítať obrázok a priradiť ho k sprite:
importovať pygame
triedaHráč(pygame.sprite. sprite):
def__init__(self, x, y, velocity_x, velocity_y, image_path):
Super().__init__()
seba.position = (x, y)
seba.velocity = (rýchlosť_x, rýchlosť_y)
seba.image = pygame.image.load (cesta k obrázku)
defaktualizovať(ja):
seba.pozícia = (seba.pozícia[0] + seba.rýchlosť[0], seba.pozícia[1] + seba.rýchlosť[1])
defkresliť(vlastný, povrch):
povrch.blit(seba.obrázok, seba.pozícia)
defmove_left(ja):
seba.velocity = (-1, seba.rýchlosť[1])
defpohnúť sa vpravo(ja):
seba.velocity = (1, seba.rýchlosť[1])
Tento kód definuje triedu Player, ktorá rozširuje triedu Sprite Pygame a zahŕňa atribúty pre pozíciu, rýchlosť a obrázok, ako aj metódy na aktualizáciu polohy sprite, nakreslenie sprite na obrazovku a ovládanie pohyb.
Môžete si to overiť Úložisko GitHub pre úplný kód!
Zlepšite správu Sprite s triedou Sprite
Trieda Sprite poskytuje pohodlný kontajner pre všetky atribúty a správanie hernej postavy, čo uľahčuje aktualizáciu, kreslenie a ovládanie sprite na obrazovke.
Implementáciou triedy Sprite do vašej hry Pygame môžete zlepšiť celkový zážitok pre svojich hráčov a zefektívniť proces vývoja pre seba.