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

Pygame ponuja več vgrajenih funkcij za odkrivanje trkov med predmeti igre. Ti so neprecenljivi, saj je natančno določiti, kdaj in kako se premikajoči predmeti prekrivajo, lahko zapletena naloga.

Naučite se dodati osnovno fiziko in trke v svojo igro z uporabo modula pygame.

Vgrajene funkcije Pygame za zaznavanje trkov

Najosnovnejša vgrajena funkcija zaznavanja trkov je spritecollide. Vzame sprite, skupino sprite in logično vrednost, ki označuje, ali naj sprite "umrejo" (se odstranijo), ko trčijo ali ne. Ta funkcija vrne seznam spritejev, ki so trčili. Tukaj je primer, kako ga uporabiti:

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

Druga uporabna funkcija zaznavanja trkov je groupcollide, ki zajema dve skupini spritejev in logično vrednost. Ta funkcija vrne slovar s trčenimi spriti kot ključi in spriti, s katerimi so trčili, kot vrednosti. Tukaj je primer, kako ga uporabiti:

instagram viewer
collision_dict = pygame.sprite.groupcollide (skupina1, skupina2, Prav, Prav)

Ustvarjanje osnovne platformne igre s funkcijo spritecollide

Če želite ustvariti osnovno platformsko igro z uporabo Pygame, boste morali ustvariti igralca sprite, ki ga lahko uporabnik nadzoruje, in platformo sprite, na kateri bo igralec stal. S funkcijo spritecollide lahko zaznate, kdaj igralec sprite trči v sprite platforme, in preprečite, da bi igralec padel skozi platformo.

Začeti, namestite modul pygame z uporabo pip:

pip namestite pygame

Potem, ustvarite preproste razrede za predvajalnik in platformo, ki bi morala podedovati Pygamov razred Sprite. Razred igralca mora imeti metodo posodabljanja za obravnavo položaja igralca glede na hitrost. Imeti mora tudi spremenljivko y_velocity za uporabo učinka gravitacije. Razred Platforma mora imeti metodo __init__, ki vzame koordinate platforme in ustvari površino te velikosti.

Razred igralca

Razred Player lahko ustvarite z uporabo pygame.sprite. Sprite modul. Ta razred bo inicializiral igralca z danimi koordinatama x in y. Nato bo metoda posodobitve posodobila položaj igralca s povečanjem vrednosti y_velocity.

uvoz pygame

razredIgralec(pygame.sprite. Sprite):
def__v__(jaz, x, y):
super().__init__()
self.image = pygame. Površina((32, 32))
self.rect = self.image.get_rect (zgoraj levo=(x, y))
self.y_velocity = 0

defnadgradnja(sebe):
self.rect.y += self.y_hitrost

Razred platforme

Razred Platforma uporablja tudi pygame.sprite. Sprite modul. Ta razred bo inicializiral platformo z danimi koordinatami x in y ter širino in višino.

razredPlatforma(pygame.sprite. Sprite):
def__v__(jaz, x, y, širina, višina):
super().__init__()
self.image = pygame. Površina ((širina, višina))
self.rect = self.image.get_rect (zgoraj levo=(x, y))

Igralna zanka

Igralna zanka vam bo omogočila, da ustvarite okno z velikostjo 640x480. Nato bo zagnal zanko, ki bo preverila morebitne dogodke, kot je ukaz za izhod. Preveril bo tudi morebitne kolizije med igralcem in platformo. Na koncu bo zaslon napolnil z belo barvo, narisal igralca in platformo ter nato obrnil zaslon.

igralec = igralec(100, 300)
skupina_igralcev = pygame.sprite. Skupina()
player_group.add (igralec)

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

# Inicializirajte pygame in ustvarite okno
pygame.init()
zaslon = pygame.display.set_mode((640, 480))

# Glavna igralna zanka
tek = Prav

medtem teče:
za dogodek v pygame.event.get():
če event.type == pygame. PRENEHATI:
tek = False

player_group.update()
collided = pygame.sprite.spritecollide (igralec, platform_group, False)

če trčil:
player.y_velocity = 0
screen.fill((255, 255, 255))
player_group.draw (zaslon)
platform_group.draw (zaslon)
pygame.display.flip()

pygame.quit()

Spodaj je rezultat:

Izvajanje vedenja gravitacije in skakanja

Če želite implementirati gravitacijo in vedenje pri skakanju v svojo platformno igro, boste morali dodati hitrost y v sprite igralca in posodobiti njegov položaj y v vsakem okvirju. Če želite to narediti, lahko uporabite metodo posodobitve znotraj razreda Player in dodate naslednji delček kode:

razredIgralec(pygame.sprite. Sprite):
def__v__(jaz, x, y):
super().__init__()
self.image = pygame. Površina((32, 32))
self.rect = self.image.get_rect (zgoraj levo=(x, y))
self.y_velocity = 0

defnadgradnja(sebe):
self.rect.y += self.y_hitrost
self.y_velocity += GRAVITACIJA # Uporabi gravitacijo za hitrost y

Zdaj vsakič, ko pokličete metodo posodobitve, posodobi položaj igralca glede na njegovo hitrost in gravitacijo.

Če želite, da igralec sprite skoči, lahko dejanje skakanja povežete z določeno tipko ali gumbom in posodobite igralčevo hitrost y z negativno vrednostjo. Naslednji delček kode je primer, kako skočiti, ko igralec pritisne preslednico.

JUMP_VELOCITY = -10

# znotraj igralne zanke
če event.type == pygame. KEYDOWN in event.key == pygame. K_SPACE:
player.y_velocity = JUMP_VELOCITY

Upoštevajte, da boste morali preveriti event.type, da se prepričate, da je dogodek dogodek KEYDOWN, preden preverite vrednost ključa.

Dodajanje osnovne fizike, kot sta trenje in pospešek

Če želite svoji platformni igri dodati osnovno fiziko, kot sta trenje in pospešek, boste morali posodobiti x hitrost sprite vašega igralca v vsakem okvirju. Razredu igralcev lahko dodate hitrost x in jo posodobite na enak način kot hitrost y. Za implementacijo trenja lahko zmanjšate x hitrost igralčevega duha za majhno količino v vsakem okvirju. V metodo posodobitve razreda Player lahko na primer dodate naslednji delček kode:

TRENJE = 0.9

razredIgralec(pygame.sprite. Sprite):
def__v__(jaz, x, y):
super().__init__()
self.image = pygame. Površina((32, 32))
self.rect = self.image.get_rect (zgoraj levo=(x, y))
self.y_velocity = 0
self.x_hitrost = 0

defnadgradnja(sebe):
self.rect.y += self.y_hitrost
self.rect.x += self.x_hitrost
self.y_velocity += GRAVITACIJA # Uporabi gravitacijo za hitrost y
samo.x_hitrost *= TRENJE # Uporabite trenje za hitrost x

Če želite implementirati pospešek, lahko nastavite spremenljivko player_movement za vodoravno gibanje in posodobite x velocity sprite igralca glede na vrednost player_movement. To lahko storite tako, da vežete gibanje na določene tipke ali gumbe in posodobite igralčevo hitrost x v zanki dogodkov, na primer:

POSPEŠEK = 0.5
igralec_gibanje = 0

če event.type == pygame. KEYDOWN:
če event.key == pygame. K_LEVO:
igralec_gibanje = -1
elif event.key == pygame. K_DESNO:
igralec_gibanje = 1
elif event.type == pygame. KEYUP:
če event.key v (pygame. K_LEVO, pygame. K_DESNO):
igralec_gibanje = 0

player.x_velocity += player_movement * ACCELERATION

Z uporabo teh tehnik lahko ustvarite preprosto, a zabavno platformsko igro z uporabo vgrajenih funkcij Pygame za zaznavanje trkov in osnovne fizike. Z malo ustvarjalnosti in eksperimentiranja lahko te tehnike uporabite za ustvarjanje različnih iger in igralnih mehanik.

Celotno kodo najdete v Repozitorij GitHub.

Spodaj je rezultat:

Izboljšajte sodelovanje uporabnikov s trki

Številne igre zahtevajo neko obliko zaznavanja trkov. S trki lahko ustvarite široko paleto mehanik iger, od preprostih platformnih iger do zapletenih simulacij, ki temeljijo na fiziki.

Implementacija osnovne fizike, kot so gravitacija, trenje in pospešek, lahko prav tako močno izboljša angažiranost uporabnikov, dodajanje realizma in občutek teže predmetom igre.