Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

Ako ste programer igara koji koristite biblioteku Pygame, vjerojatno ste naišli na klasu Sprite. Klasa Sprite moćan je alat za stvaranje likova iz igre koje možete lako pomicati, rotirati i mijenjati na zaslonu.

Pomoću jednostavnog Python programa možete naučiti o procesu stvaranja likova u igri temeljenih na spriteovima u Pygameu. Saznajte kako stvoriti osnovnu klasu Sprite, zatim dodati atribute i metode za kontrolu ponašanja.

Uvod u Pygame Sprite klasu

Klasa Sprite u Pygameu je klasa spremnika koja sadrži sve atribute i ponašanja lika iz igre. Proizlazi iz Pygameove klase Surface, koja predstavlja sliku s fiksnom širinom i visinom.

Da biste radili s njom, morat ćete stvoriti novu klasu koja nasljeđuje od klase Sprite i definirati sve atribute i metode koje želite da vaš lik u igri ima.

Stvaranje osnovne klase Sprite za lik u igri

Prvi, instalirajte pygame modul koristeći pip. Učinite to ovom naredbom:

instagram viewer
pip instalirati pygame

Da biste stvorili osnovni sprite, morat ćete uvesti klasu Sprite iz Pygamea i stvoriti novu klasu koja nasljeđuje od nje. Zatim možete definirati sve atribute i metode koje želite da vaš lik u igri ima.

Na primjer, možda biste željeli stvoriti klasu Sprite za lika igrača koji se može pomicati lijevo i desno preko zaslona. Da biste to učinili, možete definirati sljedeće atribute:

  • položaj: Torka koja sadrži x i y koordinate spritea na zaslonu.
  • brzina: Torka koja sadrži brzinu kojom se lik pomiče vodoravno i okomito.

I sljedeće metode:

  • Ažuriraj(): Metoda koja ažurira položaj spritea na temelju njegove brzine.
  • crtati(): Metoda koja privlači duh na zaslon.

Evo primjera osnovne klase Sprite koja implementira ove atribute i metode:

uvoz pygame

razredaIgrač(pygame.sprite. Sprite):
def__u tome__(ja, x, y, brzina_x, brzina_y):
super().__u tome__()
sebe.pozicija = (x, y)
sebe.brzina = (brzina_x, brzina_y)

defAžuriraj(sebe):
sebe.pozicija = (sebe.položaj[0] + sebe.brzina[0], sebe.položaj[1] + sebe.brzina[1])

defcrtati(ja, površina):
pygame.crtati.krug(površinski, (255, 0, 0), sebe.položaj, 10)

Metoda __init__ je posebna metoda u Python klasama koji se pokreće kada kreirate instancu klase. Možete ga koristiti za inicijaliziranje atributa instance.

U ovom kodu, metoda __init__ klase Player uzima četiri argumenta: x, y, velocity_x i velocity_y. Ovi argumenti postavljaju početni položaj i brzinu spritea igrača.

Metoda __init__ također poziva metodu super().__init__(), koja je metoda __init__ roditeljske klase Sprite. Ovo je neophodno jer je klasa Player podklasa klase Sprite, a metoda __init__ klase Sprite postavlja neke atribute koji su potrebni svim spriteovima.

Dodavanje atributa i metoda za kontrolu ponašanja

Sada kada imate osnovnu klasu Sprite, možete dodati atribute i metode za kontrolu ponašanja vašeg lika u igri. To može uključivati ​​stvari poput kretanja, napada, skakanja i više.

Da biste dodali ove atribute i metode, morat ćete razmisliti o radnjama koje želite u igri lik koji možete izvesti i definirajte odgovarajuće atribute i metode u vašem Spriteu razreda.

Na primjer, možda biste željeli dodati metodu za kontrolu kretanja spritea, kao što je metoda move_left() koja smanjuje brzinu spritea na x-osi.

Evo primjera modificirane Sprite klase koja uključuje ove dodatne atribute i metode:

razredaIgrač(pygame.sprite. Sprite):
def__u tome__(ja, x, y, brzina_x, brzina_y):
super().__u tome__()
sebe.pozicija = (x, y)
sebe.brzina = (brzina_x, brzina_y)

defAžuriraj(sebe):
sebe.pozicija = (sebe.položaj[0] + sebe.brzina[0], sebe.položaj[1] + sebe.brzina[1])

defcrtati(ja, površina):
pygame.crtati.krug(površinski, (255, 0, 0), sebe.položaj, 10)

defpomakni_lijevo(sebe):
sebe.brzina = (-1, sebe.brzina[1])

defpomaknuti se udesno(sebe):
sebe.brzina = (1, sebe.brzina[1])

Da biste koristili klasu Player u svojoj Pygame igri, morat ćete stvoriti instancu klase i pozivati ​​njezine metode prema potrebi.

Započnite stvaranjem prozora i instance Player spritea:

# Inicijalizirajte Pygame
pygame.init()

# Postavite veličinu prozora
veličina_prozora = (640, 480)

# Napravite prozor
prozor = pygame.display.set_mode (veličina_prozora)

# Stvorite sprite igrača
igrač = igrač(320, 240, 0, 0)

Zatim definirajte glavnu petlju igre koja obrađuje događaje na tipkovnici i ažuriranja te crta sprite. Kada pritisnete lijevu ili desnu strelicu, sprite će se pomaknuti u odgovarajućem smjeru.

# Glavna petlja igre
dokPravi:
# Rukovanje događajima
za događaj u pygame.event.get():
ako event.type == pygame. PRESTATI:
pygame.quit()
sys.exit()

ako event.type == pygame. KEYDOWN:
ako event.key == pygame. K_LIJEVO:
player.move_left()
elif event.key == pygame. K_DESNO:
player.move_right()

# Ažurirajte sprite igrača
player.update()

# Očistite prozor
window.fill((255, 255, 255))

# Nacrtajte sprite igrača
player.draw (prozor)

# Ažurirajte zaslon
pygame.display.update()

S dobivenim programom moći ćete kontrolirati sprite igrača i promatrati ga kako se crta na zaslonu na različitim pozicijama:

Učitavanje i prikazivanje Sprite grafike pomoću Image Modula

Sada kada imate osnovnu Sprite klasu s atributima i metodama za kontrolu ponašanja, vjerojatno ćete htjeti dodati malo grafike svom spriteu. Pygameov slikovni modul olakšava učitavanje i prikaz slika na ekranu.

Za učitavanje slike morat ćete upotrijebiti funkciju pygame.image.load(), koja uzima putanju datoteke kao argument i vraća Surface objekt. Tada možete dodijeliti ovaj površinski objekt atributu spritea, kao što je self.image, koji možete koristiti za crtanje spritea na zaslonu.

Na primjer, evo kako možete učitati sliku i dodijeliti je spriteu:

uvoz pygame

razredaIgrač(pygame.sprite. Sprite):
def__u tome__(self, x, y, velocity_x, velocity_y, image_path):
super().__u tome__()
sebe.pozicija = (x, y)
sebe.brzina = (brzina_x, brzina_y)
sebe.image = pygame.image.load (image_path)

defAžuriraj(sebe):
sebe.pozicija = (sebe.položaj[0] + sebe.brzina[0], sebe.položaj[1] + sebe.brzina[1])

defcrtati(ja, površina):
površinski.blit(sebe.slika, sebe.položaj)

defpomakni_lijevo(sebe):
sebe.brzina = (-1, sebe.brzina[1])

defpomaknuti se udesno(sebe):
sebe.brzina = (1, sebe.brzina[1])

Ovaj kod definira klasu Player koja proširuje Pygame Sprite klasu i uključuje atribute za položaj, brzinu i slike, kao i metode za ažuriranje položaja spritea, crtanje spritea na zaslon i upravljanje pokret.

Možete pogledati ovo GitHub repo za kompletan kod!

Poboljšajte upravljanje Spriteom uz Sprite Class

Klasa Sprite pruža prikladan spremnik za sve atribute i ponašanja lika u igri, što olakšava ažuriranje, crtanje i kontrolu spritea na zaslonu.

Implementacijom klase Sprite u svoju Pygame igru, možete poboljšati sveukupno iskustvo za svoje igrače i pojednostaviti razvojni proces za sebe.