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

Pygame nudi nekoliko ugrađenih funkcija za otkrivanje sudara između objekata igre. Oni su neprocjenjivi jer utvrđivanje kada i kako se pokretni objekti preklapaju može biti kompliciran zadatak.

Naučite kako dodati osnovnu fiziku i sudare u svoju igru ​​pomoću pygame modula.

Pygameove ugrađene funkcije otkrivanja sudara

Najosnovnija ugrađena funkcija otkrivanja sudara je spritecollide. Potreban je sprite, grupa spriteova i boolean vrijednost koja pokazuje trebaju li ili ne spriteovi "umrijeti" (biti uklonjeni) kada se sudare. Ova funkcija vraća popis spriteova koji su se sudarili. Evo primjera kako ga koristiti:

collided_sprites = pygame.sprite.spritecollide (sprite1, sprite_group, Pravi)

Još jedna korisna funkcija otkrivanja sudara je groupcollide, koja također uzima dvije grupe spriteova i Booleovu vrijednost. Ova funkcija vraća rječnik sa sudarenim spriteovima kao ključevima i spriteovima s kojima su se sudarili kao vrijednostima. Evo primjera kako ga koristiti:

instagram viewer

collision_dict = pygame.sprite.groupcollide (grupa1, grupa2, Pravi, Pravi)

Stvaranje osnovne platformske igre pomoću funkcije spritecollide

Da biste izradili osnovnu platformersku igru ​​pomoću Pygamea, morat ćete izraditi sprite igrača kojim korisnik može upravljati i sprite platforme na kojem će igrač stajati. Možete upotrijebiti funkciju spritecollide da otkrijete kada se sprite igrača sudari s spriteom platforme i spriječite igrača da padne kroz platformu.

Početi, instalirajte pygame modul koristeći pip:

pip instaliraj pygame

nakon toga, stvoriti jednostavne klase za Player i Platformu, a oboje bi trebali naslijediti Pygame-ovu Sprite klasu. Klasa igrača trebala bi imati metodu ažuriranja za rukovanje pozicijom igrača na temelju brzine. Također, treba imati varijablu y_velocity za primjenu učinka gravitacije. Klasa Platforma treba imati metodu __init__ koja uzima koordinate platforme i stvara površinu te veličine.

Klasa igrača

Klasu igrača možete stvoriti koristeći pygame.sprite. Sprite modul. Ova klasa će inicijalizirati igrača sa zadanim x i y koordinatama. Zatim će metoda ažuriranja ažurirati poziciju igrača povećanjem vrijednosti y_velocity.

uvoz pygame

razredaIgrač(pygame.sprite. Sprite):
def__u tome__(ja, x, y):
super().__init__()
self.image = pygame. Površinski((32, 32))
self.rect = self.image.get_rect (gorelijevo=(x, y))
self.y_brzina = 0

defAžuriraj(sebe):
self.rect.y += self.y_brzina

Klasa platforme

Klasa Platform također koristi pygame.sprite. Sprite modul. Ova klasa će inicijalizirati platformu sa zadanim x i y koordinatama, kao i širinom i visinom.

razredaPlatforma(pygame.sprite. Sprite):
def__u tome__(ja, x, y, širina, visina):
super().__init__()
self.image = pygame. Površina ((širina, visina))
self.rect = self.image.get_rect (gorelijevo=(x, y))

Petlja igre

Petlja igre omogućit će vam stvaranje prozora veličine 640x480. Zatim će pokrenuti petlju koja će provjeriti sve događaje, kao što je naredba za izlazak. Također će provjeriti postoje li kolizije između igrača i platforme. Na kraju će ekran ispuniti bijelom bojom, nacrtati igrača i platformu, a zatim okrenuti zaslon.

igrač = igrač(100, 300)
grupa_igrača = pygame.sprite. Skupina()
player_group.add (igrač)

platforma = platforma(50, 400, 100, 20)
platform_group = pygame.sprite. Skupina()
platform_group.add (platforma)

# Inicijalizirajte pygame i kreirajte prozor
pygame.init()
zaslon = pygame.display.set_mode((640, 480))

# Glavna petlja igre
trčanje = Pravi

dok trčanje:
za događaj u pygame.event.get():
ako event.type == pygame. PRESTATI:
trčanje = lažno

player_group.update()
collided = pygame.sprite.spritecollide (igrač, platform_group, lažno)

ako sudario se:
igrač.y_brzina = 0
screen.fill((255, 255, 255))
player_group.draw (zaslon)
platform_group.draw (zaslon)
pygame.display.flip()

pygame.quit()

Ispod je izlaz:

Primjena gravitacije i ponašanja pri skakanju

Da biste implementirali gravitaciju i ponašanje pri skakanju u svoju platformsku igru, morat ćete dodati y brzinu svom igračevom spriteu i ažurirati njegovu y poziciju u svakom okviru. Da biste to učinili, možete koristiti metodu ažuriranja unutar klase Player i dodati sljedeći isječak koda:

razredaIgrač(pygame.sprite. Sprite):
def__u tome__(ja, x, y):
super().__init__()
self.image = pygame. Površinski((32, 32))
self.rect = self.image.get_rect (gorelijevo=(x, y))
self.y_brzina = 0

defAžuriraj(sebe):
self.rect.y += self.y_brzina
samo.y_brzina += GRAVITACIJA # Primijenite gravitaciju na y brzinu

Sada svaki put kada pozovete metodu ažuriranja, ona će ažurirati položaj igrača prema njegovoj brzini i gravitaciji.

Da bi igrač skočio spriteom, možete vezati akciju skakanja na određenu tipku ili gumb i ažurirati igračevu y brzinu negativnom vrijednošću. Sljedeći isječak koda je primjer kako skočiti kada igrač pritisne razmaknicu.

BRZINA_SKOKA = -10

# unutar petlje igre
ako event.type == pygame. KEYDOWN i event.key == pygame. K_SPACE:
player.y_velocity = JUMP_VELOCITY

Imajte na umu da ćete morati provjeriti event.type kako biste bili sigurni da je događaj događaj KEYDOWN prije provjere vrijednosti ključa.

Dodavanje osnovne fizike kao što su trenje i ubrzanje

Da biste dodali osnovnu fiziku kao što su trenje i ubrzanje u svoju platformersku igru, morat ćete ažurirati x brzinu svog igrača u svakom okviru. Možete dodati x velocity klasi igrača i ažurirati je na isti način kao i y velocity. Da biste primijenili trenje, možete smanjiti x brzinu lika igrača za malu količinu u svakom okviru. Na primjer, možete dodati sljedeći isječak koda unutar metode ažuriranja klase Player:

TRENJE = 0.9

razredaIgrač(pygame.sprite. Sprite):
def__u tome__(ja, x, y):
super().__init__()
self.image = pygame. Površinski((32, 32))
self.rect = self.image.get_rect (gorelijevo=(x, y))
self.y_brzina = 0
samo.x_brzina = 0

defAžuriraj(sebe):
self.rect.y += self.y_brzina
self.rect.x += self.x_brzina
samo.y_brzina += GRAVITACIJA # Primijenite gravitaciju na y brzinu
samo.x_brzina *= TRENJE # Primijenite trenje na brzinu x

Da biste implementirali ubrzanje, možete postaviti varijablu, player_movement, za vodoravno kretanje i ažurirati x brzinu lika igrača prema vrijednosti player_movement. To možete učiniti tako da vežete pokret za određene tipke ili gumbe i ažurirate igračevu x brzinu u petlji događaja, na primjer:

UBRZANJE = 0.5
pokret_igrača = 0

ako event.type == pygame. KEYDOWN:
ako event.key == pygame. K_LIJEVO:
pokret_igrača = -1
elif event.key == pygame. K_DESNO:
pokret_igrača = 1
elif event.type == pygame. KEYUP:
ako događaj.ključ u (pygame. K_LEFT, pygame. K_DESNO):
pokret_igrača = 0

player.x_velocity += player_movement * AKCELERACIJA

Korištenjem ovih tehnika možete stvoriti jednostavnu, ali zabavnu platformersku igru ​​koristeći Pygameove ugrađene funkcije otkrivanja sudara i osnovnu fiziku. Uz malo kreativnosti i eksperimentiranja, možete koristiti ove tehnike za stvaranje niza različitih igara i mehanike igara.

Kompletan kod možete pronaći u GitHub spremište.

Ispod je izlaz:

Poboljšajte angažman korisnika s kolizijama

Mnoge igre zahtijevaju neki oblik otkrivanja sudara. Možete koristiti sudare za stvaranje širokog spektra mehanike igre, od jednostavnih platformskih igra do složenih simulacija temeljenih na fizici.

Implementacija osnovne fizike kao što su gravitacija, trenje i ubrzanje također može uvelike poboljšati angažman korisnika, dodajući realizam i osjećaj težine objektima u igri.