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:
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 = Pravmedtem 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.