Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu. Loe rohkem.

Kui olete Pygame'i teeki kasutav mänguarendaja, olete tõenäoliselt kohanud Sprite'i klassi. Sprite klass on võimas tööriist mängutegelaste loomiseks, mida saate ekraanil hõlpsalt liigutada, pöörata ja skaleerida.

Lihtsa Pythoni programmiga saate õppida Pygame'is sprite-põhiste mängutegelaste loomise protsessi. Siit saate teada, kuidas luua Sprite'i põhiklass, seejärel lisada käitumise juhtimiseks atribuute ja meetodeid.

Sissejuhatus Pygame'i Sprite klassi

Pygame'i Sprite klass on konteinerklass, mis sisaldab kõiki mängutegelase atribuute ja käitumist. See tuleneb Pygame'i Surface klassist, mis esindab fikseeritud laiuse ja kõrgusega pilti.

Sellega töötamiseks peate looma uue klassi, mis pärib Sprite klassist, ning määratlema kõik atribuudid ja meetodid, mida soovite oma mängutegelasel kasutada.

Mängutegelasele Sprite'i põhiklassi loomine

Esiteks installige pygame'i moodul pip abil. Tehke seda selle käsuga:

instagram viewer
pip installida pygame

Põhisprite'i loomiseks peate Pygame'ist importima Sprite'i klassi ja looma uue klassi, mis pärib sellest. Seejärel saate määratleda mis tahes atribuudid ja meetodid, mida soovite oma mängutegelasel kasutada.

Näiteks võiksite luua Sprite klassi mängijategelastele, kes saavad ekraanil vasakule ja paremale liikuda. Selleks saate määratleda järgmised atribuudid:

  • positsioon: Korteež, mis hoiab ekraanil spraidi x ja y koordinaate.
  • kiirus: Korteel, mis hoiab kiirust, millega spraiti liigub horisontaalselt ja vertikaalselt.

Ja järgmised meetodid:

  • värskendus (): Meetod, mis värskendab spraidi asukohta selle kiiruse alusel.
  • joonista (): Meetod, mis tõmbab spraiti ekraanile.

Siin on näide Sprite'i põhiklassist, mis rakendab neid atribuute ja meetodeid:

importida pygame

klassMängija(pygame.sprite. Sprite):
def__selles__(self, x, y, kiirus_x, kiirus_y):
Super().__selles__()
ise.position = (x, y)
ise.velocity = (kiirus_x, kiirus_y)

defvärskendada(ise):
ise.position = (ise.position[0] + ise.velocity[0], ise.position[1] + ise.velocity[1])

defjoonistada(ise, pind):
pygame.joonista.ring(pinnale, (255, 0, 0), ise.positsioon, 10)

Meetod __init__ on eriline meetod Pythoni klassides mis käitatakse klassi eksemplari loomisel. Saate seda kasutada eksemplari atribuutide lähtestamiseks.

Selles koodis võtab Player klassi meetod __init__ neli argumenti: x, y, kiirus_x ja kiirus_y. Need argumendid määravad mängija spraidi algpositsiooni ja kiiruse.

Meetod __init__ kutsub ka meetodit super().__init__(), mis on Sprite vanemklassi meetod __init__. See on vajalik, kuna Player klass on Sprite klassi alamklass ja Sprite klassi meetod __init__ seadistab mõned atribuudid, mida kõik spraidid vajavad.

Atribuutide ja meetodite lisamine käitumise kontrollimiseks

Nüüd, kui teil on Sprite'i põhiklass, saate oma mängutegelase käitumise juhtimiseks lisada atribuute ja meetodeid. See võib hõlmata selliseid asju nagu liikumine, ründamine, hüppamine ja palju muud.

Nende atribuutide ja meetodite lisamiseks peate mõtlema, milliseid toiminguid soovite oma mängus teha tähemärki, mida saab täita, ja määratlege oma Sprite'is vastavad atribuudid ja meetodid klass.

Näiteks võiksite lisada meetodi spraidi liikumise juhtimiseks, näiteks meetodi move_left(), mis vähendab spraidi kiirust x-teljel.

Siin on näide muudetud Sprite klassist, mis sisaldab neid täiendavaid atribuute ja meetodeid:

klassMängija(pygame.sprite. Sprite):
def__selles__(self, x, y, kiirus_x, kiirus_y):
Super().__selles__()
ise.position = (x, y)
ise.velocity = (kiirus_x, kiirus_y)

defvärskendada(ise):
ise.position = (ise.position[0] + ise.velocity[0], ise.position[1] + ise.velocity[1])

defjoonistada(ise, pind):
pygame.joonista.ring(pinnale, (255, 0, 0), ise.positsioon, 10)

defliigu vasakule(ise):
ise.velocity = (-1, ise.velocity[1])

defliigu paremale(ise):
ise.velocity = (1, ise.velocity[1])

Mängija klassi kasutamiseks Pygame'i mängus peate looma klassi eksemplari ja kutsuma selle meetodeid vastavalt vajadusele.

Alustuseks looge aken ja Player sprite'i eksemplar:

# Initsialiseeri Pygame
pygame.init()

# Määrake akna suurus
window_size = (640, 480)

# Loo aken
aken = pygame.display.set_mode (akna_suurus)

# Looge mängija sprait
mängija = mängija(320, 240, 0, 0)

Seejärel määrake peamine mängutsükkel, mis tegeleb klaviatuuri sündmustega ning värskendab ja joonistab spraiti. Kui vajutate vasakut või paremat nooleklahvi, liigub sprait vastavas suunas.

# Peamine mängusilmus
samal ajalTõsi:
# Juhtige sündmusi
jaoks sündmus sisse pygame.event.get():
kui event.type == mängumäng. VÄLJA:
pygame.quit()
sys.exit()

kui event.type == mängumäng. KEYDOWN:
kui event.key == mängumäng. K_LEFT:
player.move_left()
elif event.key == mängumäng. K_RIGHT:
player.move_right()

# Värskendage mängija spraiti
player.update()

# Tühjendage aken
window.fill((255, 255, 255))

# Joonistage mängija sprait
player.draw (aken)

# Värskendage ekraani
pygame.display.update()

Saadud programmiga saate juhtida mängija spraiti ja jälgida selle joonistamist ekraanile erinevates kohtades:

Sprite graafika laadimine ja kuvamine pildimooduli abil

Nüüd, kui teil on Sprite'i põhiklass käitumise juhtimise atribuutide ja meetoditega, soovite tõenäoliselt lisada oma spraiti graafikat. Pygame’i pildimoodul teeb piltide laadimise ja ekraanil kuvamise lihtsaks.

Pildi laadimiseks peate kasutama funktsiooni pygame.image.load(), mis võtab argumendina failitee ja tagastab Surface'i objekti. Seejärel saate selle Surface'i objekti määrata spraidi atribuudile, näiteks self.image, mille abil saate spraidi ekraanile joonistada.

Näiteks saate pildi laadida ja spraitile määrata järgmiselt.

importida pygame

klassMängija(pygame.sprite. Sprite):
def__selles__(self, x, y, kiirus_x, kiirus_y, pildi_tee):
Super().__selles__()
ise.position = (x, y)
ise.velocity = (kiirus_x, kiirus_y)
ise.image = pygame.image.load (image_path)

defvärskendada(ise):
ise.position = (ise.position[0] + ise.velocity[0], ise.position[1] + ise.velocity[1])

defjoonistada(ise, pind):
pinnale.blit(ise.pilt, ise.positsioon)

defliigu vasakule(ise):
ise.velocity = (-1, ise.velocity[1])

defliigu paremale(ise):
ise.velocity = (1, ise.velocity[1])

See kood määratleb mängija klassi, mis laiendab Pygame'i Sprite klassi ja sisaldab atribuute asukoha, kiiruse ja pilt, samuti meetodid spraidi asukoha värskendamiseks, spraidi ekraanile tõmbamiseks ja juhtimiseks liikumine.

Saate seda kontrollida GitHubi repo kogu koodi jaoks!

Täiustage Sprite'i haldust Sprite klassiga

Sprite klass pakub mugavat konteinerit mängutegelase kõikide atribuutide ja käitumisviiside jaoks, muutes spraiti ekraanil värskendamise, joonistamise ja juhtimise lihtsaks.

Rakendades oma Pygame'i mängus Sprite'i klassi, saate oma mängijate üldist kogemust parandada ja arendusprotsessi enda jaoks sujuvamaks muuta.