Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Če ste razvijalec iger, ki uporabljate knjižnico Pygame, ste verjetno že naleteli na razred Sprite. Razred Sprite je zmogljivo orodje za ustvarjanje igralnih likov, ki jih lahko preprosto premikate, vrtite in spreminjate na zaslonu.

S preprostim programom Python se lahko naučite o procesu ustvarjanja igralnih likov na osnovi sprite v Pygame. Ugotovite, kako ustvariti osnovni razred Sprite, nato dodati atribute in metode za nadzor vedenja.

Uvod v Pygameov razred Sprite

Razred Sprite v Pygame je vsebniški razred, ki vsebuje vse atribute in vedenja igralnega lika. Izhaja iz razreda Pygame Surface, ki predstavlja sliko s fiksno širino in višino.

Če želite delati z njim, boste morali ustvariti nov razred, ki bo podedoval razred Sprite, in definirati vse atribute in metode, ki jih želite imeti od vašega igralnega lika.

Ustvarjanje osnovnega razreda Sprite za igralni lik

instagram viewer

Prvič, namestite modul pygame z uporabo pip. To storite s tem ukazom:

pip namestite pygame

Če želite ustvariti osnovni sprite, boste morali uvoziti razred Sprite iz Pygame in ustvariti nov razred, ki ga podeduje. Nato lahko definirate vse atribute in metode, ki jih želite, da ima vaš igralni lik.

Na primer, morda boste želeli ustvariti razred Sprite za lik igralca, ki se lahko premika levo in desno po zaslonu. Če želite to narediti, lahko definirate naslednje atribute:

  • položaj: Torka, ki vsebuje koordinate x in y sprite na zaslonu.
  • hitrost: Tulka, ki vsebuje hitrost, s katero se sprite premika vodoravno in navpično.

In naslednje metode:

  • nadgradnja(): Metoda, ki posodablja položaj sprite glede na njegovo hitrost.
  • risanje(): Metoda, ki nariše sprite na zaslon.

Tukaj je primer osnovnega razreda Sprite, ki izvaja te atribute in metode:

uvoz pygame

razredIgralec(pygame.sprite. Sprite):
def__v__(jaz, x, y, hitrost_x, hitrost_y):
super().__v__()
sebe.položaj = (x, y)
sebe.velocity = (hitrost_x, hitrost_y)

defnadgradnja(sebe):
sebe.položaj = (sebe.position[0] + sebe.velocity[0], sebe.position[1] + sebe.velocity[1])

defpripraviti(jaz, površina):
pygame.risanje.krog(površino, (255, 0, 0), sebe.položaj, 10)

Metoda __init__ je posebna metoda v razredih Python ki se zažene, ko ustvarite primerek razreda. Uporabite ga lahko za inicializacijo atributov primerka.

V tej kodi ima metoda __init__ razreda Player štiri argumente: x, y, velocity_x in velocity_y. Ti argumenti določajo začetni položaj in hitrost sprite igralca.

Metoda __init__ pokliče tudi metodo super().__init__(), ki je metoda __init__ nadrejenega razreda Sprite. To je potrebno, ker je razred Player podrazred razreda Sprite in metoda __init__ razreda Sprite nastavi nekatere atribute, ki jih potrebujejo vsi sprite.

Dodajanje atributov in metod za nadzor vedenja

Zdaj, ko imate osnovni razred Sprite, lahko dodate atribute in metode za nadzor obnašanja vašega igralnega lika. To lahko vključuje stvari, kot so gibanje, napad, skakanje in drugo.

Če želite dodati te atribute in metode, boste morali razmisliti o tem, katera dejanja želite za svojo igro lik, ki ga lahko izvedete, in definirajte ustrezne atribute in metode v vašem Spriteu razred.

Na primer, morda boste želeli dodati metodo za nadzor gibanja spritea, kot je metoda move_left(), ki zmanjša hitrost sprite na osi x.

Tukaj je primer spremenjenega razreda Sprite, ki vključuje te dodatne atribute in metode:

razredIgralec(pygame.sprite. Sprite):
def__v__(jaz, x, y, hitrost_x, hitrost_y):
super().__v__()
sebe.položaj = (x, y)
sebe.velocity = (hitrost_x, hitrost_y)

defnadgradnja(sebe):
sebe.položaj = (sebe.position[0] + sebe.velocity[0], sebe.position[1] + sebe.velocity[1])

defpripraviti(jaz, površina):
pygame.risanje.krog(površino, (255, 0, 0), sebe.položaj, 10)

defpremakni levo(sebe):
sebe.velocity = (-1, sebe.velocity[1])

defpremakni desno(sebe):
sebe.velocity = (1, sebe.velocity[1])

Če želite uporabiti razred Player v svoji igri Pygame, boste morali ustvariti primerek razreda in po potrebi poklicati njegove metode.

Začnite z ustvarjanjem okna in primerka igralca sprite:

# Inicializirajte Pygame
pygame.init()

# Nastavite velikost okna
velikost_okna = (640, 480)

# Ustvarite okno
okno = pygame.display.set_mode (velikost_okna)

# Ustvarite sprite igralca
igralec = igralec(320, 240, 0, 0)

Nato definirajte glavno igralno zanko, ki obravnava dogodke na tipkovnici in posodobitve ter nariše sprite. Ko pritisnete levo ali desno puščično tipko, se bo sprite premaknil v ustrezno smer.

# Glavna igralna zanka
medtemPrav:
# Obravnavajte dogodke
za dogodek v pygame.event.get():
če event.type == pygame. PRENEHATI:
pygame.quit()
sys.exit()

če event.type == pygame. KEYDOWN:
če event.key == pygame. K_LEVO:
player.move_left()
elif event.key == pygame. K_DESNO:
player.move_right()

# Posodobite sprite igralca
player.update()

# Počistite okno
window.fill((255, 255, 255))

# Narišite sprite igralca
player.draw (okno)

# Posodobite zaslon
pygame.display.update()

Z nastalim programom boste lahko nadzirali sprite igralca in ga opazovali, kako riše na zaslonu na različnih položajih:

Nalaganje in prikaz grafike Sprite z uporabo slikovnega modula

Zdaj, ko imate osnovni razred Sprite z atributi in metodami za nadzor obnašanja, boste verjetno želeli dodati nekaj grafike svojemu Spriteu. Slikovni modul Pygame olajša nalaganje in prikaz slik na zaslonu.

Če želite naložiti sliko, boste morali uporabiti funkcijo pygame.image.load(), ki vzame pot datoteke kot argument in vrne objekt Surface. Ta predmet Surface lahko nato dodelite atributu sprite, kot je self.image, ki ga lahko uporabite za risanje sprite na zaslon.

Na primer, tukaj je opisano, kako lahko naložite sliko in jo dodelite spritu:

uvoz pygame

razredIgralec(pygame.sprite. Sprite):
def__v__(self, x, y, velocity_x, velocity_y, image_path):
super().__v__()
sebe.položaj = (x, y)
sebe.velocity = (hitrost_x, hitrost_y)
sebe.image = pygame.image.load (pot_slike)

defnadgradnja(sebe):
sebe.položaj = (sebe.position[0] + sebe.velocity[0], sebe.position[1] + sebe.velocity[1])

defpripraviti(jaz, površina):
površino.blit(sebe.slika, sebe.položaj)

defpremakni levo(sebe):
sebe.velocity = (-1, sebe.velocity[1])

defpremakni desno(sebe):
sebe.velocity = (1, sebe.velocity[1])

Ta koda definira razred Player, ki razširja Pygamov razred Sprite in vključuje atribute za položaj, hitrost in sliko, pa tudi metode za posodabljanje položaja spritea, risanje spritea na zaslon in nadzor premikanje.

To lahko preverite GitHub repo za celotno kodo!

Izboljšajte upravljanje Sprite z razredom Sprite

Razred Sprite ponuja priročen vsebnik za vse atribute in vedenje igralnega lika, kar olajša posodabljanje, risanje in nadzor nad spriteom na zaslonu.

Z implementacijo razreda Sprite v svojo igro Pygame lahko izboljšate splošno izkušnjo za svoje igralce in poenostavite razvojni proces zase.