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

Pygame pakub mitmeid sisseehitatud funktsioone mänguobjektide kokkupõrgete tuvastamiseks. Need on hindamatud, sest liikuvate objektide kattumise aja ja viisi täpselt välja selgitamine võib olla keeruline ülesanne.

Siit saate teada, kuidas pygame'i mooduli abil oma mängu lisada põhifüüsikat ja kokkupõrkeid.

Pygame'i sisseehitatud kokkupõrgete tuvastamise funktsioonid

Kõige elementaarsem sisseehitatud kokkupõrke tuvastamise funktsioon on spritecollide. See võtab spraidi, spraitide rühma ja tõeväärtuse, mis näitab, kas spraidid peaksid kokkupõrkel "surema" (eemaldama) või mitte. See funktsioon tagastab kokkupõrkunud spraitide loendi. Siin on näide selle kasutamisest:

collided_sprites = pygame.sprite.spritecollide (sprite1, sprite_group, Tõsi)

Veel üks kasulik kokkupõrgete tuvastamise funktsioon on groupcollide, mis võtab kaks spraitide rühma ja ka tõeväärtuse. See funktsioon tagastab sõnastiku, milles on klahvidena põrkuvad spraidid ja väärtusteks spraidid, millega nad kokku põrkasid. Siin on näide selle kasutamise kohta.

instagram viewer

collision_dict = pygame.sprite.groupcollide (rühm1, rühm2, Tõsi, Tõsi)

Põhilise platvormimängu loomine funktsiooni spritecollide abil

Pygame'i abil põhiplatvormimängu loomiseks peate looma mängija spraidi, mida kasutaja saab juhtida, ja platvormi spraidi, millel mängija saab seista. Spritecollide funktsiooni abil saate tuvastada, millal mängija sprait platvormi spraidiga kokku põrkub, ja vältida mängija kukkumist läbi platvormi.

Alustama, installige pygame'i moodul pip abil:

pip install pygame

Pärast seda, luua lihtsaid klasse mängija ja platvormi jaoks, mis mõlemad peaksid pärima Pygame'i Sprite'i klassist. Mängijaklassil peaks olema uuendusmeetod, mis võimaldab mängija positsiooni kiiruse alusel käsitleda. Gravitatsiooniefekti rakendamiseks peaks sellel olema ka muutuja y_velocity. Platvormi klassis peaks olema meetod __init__, mis võtab platvormi koordinaadid ja loob sellise suurusega pinna.

Mängija klass

Mängijaklassi saate luua faili pygame.sprite abil. Sprite moodul. See klass lähtestab mängija antud x ja y koordinaatidega. Seejärel värskendab värskendusmeetod mängija asukohta, suurendades y_velocity väärtust.

importida pygame

klassMängija(pygame.sprite. Sprite):
def__selles__(ise, x, y):
super().__init__()
self.image = pygame. Surface((32, 32))
self.rect = self.image.get_rect (üleval vasakul = (x, y))
ise.y_kiirus = 0

defvärskendada(ise):
ise.rekt.y += ise.y_kiirus

Platvormi klass

Platvormi klass kasutab ka pygame.sprite. Sprite moodul. See klass lähtestab platvormi antud x- ja y-koordinaatide ning laiuse ja kõrgusega.

klassPlatvorm(pygame.sprite. Sprite):
def__selles__(ise, x, y, laius, kõrgus):
super().__init__()
self.image = pygame. Pind ((laius, kõrgus))
self.rect = self.image.get_rect (üleval vasakul = (x, y))

Mängutsükkel

Mängutsükkel võimaldab teil luua akna suurusega 640x480. Seejärel käivitab see tsükli, mis kontrollib sündmusi, näiteks väljumiskäsku. Samuti kontrollib see mängija ja platvormi vahelisi kokkupõrkeid. Lõpuks täidab see ekraani valge värviga, joonistab mängija ja platvormi ning pöörab seejärel ekraani ümber.

mängija = mängija(100, 300)
player_group = pygame.sprite. Grupp()
player_group.add (mängija)

platvorm = platvorm(50, 400, 100, 20)
platform_group = pygame.sprite. Grupp()
platform_group.add (platvorm)

# Initsialiseerige pygame ja looge aken
pygame.init()
ekraan = pygame.display.set_mode((640, 480))

# Peamine mängusilmus
jookseb = Tõsi

samal ajal jooksmine:
jaoks sündmus sisse pygame.event.get():
kui event.type == mängumäng. VÄLJA:
jookseb = Vale

player_group.update()
põrkas = pygame.sprite.spritecollide (mängija, platvormi_grupp, Vale)

kui põrkas kokku:
player.y_velocity = 0
screen.fill((255, 255, 255))
player_group.draw (ekraan)
platform_group.draw (ekraan)
pygame.display.flip()

pygame.quit()

Allpool on väljund:

Gravitatsiooni ja hüppekäitumise rakendamine

Gravitatsiooni- ja hüppekäitumise rakendamiseks oma platvormimängus peate lisama oma mängija spraitile kiiruse y ja värskendama selle y-positsiooni igas kaadris. Selleks saate kasutada Player klassi värskendusmeetodit ja lisada järgmine koodijupp:

klassMängija(pygame.sprite. Sprite):
def__selles__(ise, x, y):
super().__init__()
self.image = pygame. Surface((32, 32))
self.rect = self.image.get_rect (üleval vasakul = (x, y))
ise.y_kiirus = 0

defvärskendada(ise):
ise.rekt.y += ise.y_kiirus
self.y_velocity += GRAVITSIOON # Rakenda gravitatsiooni kiirusele y

Nüüd iga kord, kui helistate värskendusmeetodile, värskendab see mängija asukohta vastavalt selle kiirusele ja raskusastmele.

Mängija spraidi hüppamiseks saate hüppetoimingu siduda kindla klahvi või nupuga ja värskendada mängija y kiirust negatiivse väärtusega. Järgmine koodilõik on näide hüppamisest, kui mängija vajutab tühikuklahvi.

JUMP_VELOCITY = -10

# mängutsükli sees
kui event.type == mängumäng. KLAHV ja event.key == mängumäng. K_SPACE:
player.y_velocity = JUMP_VELOCITY

Pange tähele, et enne võtme väärtuse kontrollimist peate kontrollima faili event.type, et veenduda, et sündmus on KEYDOWN.

Põhifüüsika (nt hõõrdumine ja kiirendus) lisamine

Põhifüüsika (nt hõõrdumine ja kiirendus) lisamiseks oma platvormimängule peate igas kaadris värskendama oma mängija spraidi kiirust x. Saate lisada mängija klassile x kiiruse ja värskendada seda samamoodi nagu y kiirust. Hõõrdumise rakendamiseks saate igas kaadris mängija spraiti x kiirust veidi vähendada. Näiteks saate Player klassi värskendusmeetodi sisse lisada järgmise koodilõigu:

HÕRDUMINE = 0.9

klassMängija(pygame.sprite. Sprite):
def__selles__(ise, x, y):
super().__init__()
self.image = pygame. Surface((32, 32))
self.rect = self.image.get_rect (üleval vasakul = (x, y))
ise.y_kiirus = 0
ise.x_kiirus = 0

defvärskendada(ise):
ise.rekt.y += ise.y_kiirus
ise.rekt.x += ise.x_kiirus
self.y_velocity += GRAVITSIOON # Rakenda gravitatsiooni kiirusele y
self.x_velocity *= HÕRDUMINE # Rakendage hõõrdumist kiirusele x

Kiirenduse rakendamiseks saate määrata horisontaalse liikumise jaoks muutuja player_movement ja värskendada mängija spraidi x kiirust vastavalt mängija_liikumise väärtusele. Seda saate teha, sidudes liikumise kindlate klahvide või nuppudega ja värskendades näiteks mängija x kiirust sündmusetsüklis:

KIIRENDUS = 0.5
mängija_liikumine = 0

kui event.type == mängumäng. KEYDOWN:
kui event.key == mängumäng. K_LEFT:
mängija_liikumine = -1
elif event.key == mängumäng. K_RIGHT:
mängija_liikumine = 1
elif event.type == mängumäng. KEYUP:
kui sündmus.võti sisse (pygame. K_LEFT, pygame. K_RIGHT):
mängija_liikumine = 0

mängija.x_kiirus += mängija_liikumine * KIIRENDAMINE

Neid tehnikaid kasutades saate Pygame'i sisseehitatud kokkupõrketuvastusfunktsioonide ja põhifüüsika abil luua lihtsa, kuid lõbusa platvormimängu. Väikese loovuse ja katsetamise abil saate neid tehnikaid kasutada erinevate mängude ja mängumehaanika loomiseks.

Täieliku koodi leiate aadressilt GitHubi hoidla.

Allpool on väljund:

Parandage kasutajate seotust kokkupõrgetega

Paljud mängud nõuavad teatud tüüpi kokkupõrke tuvastamist. Kokkupõrgete abil saate luua laias valikus mängumehaanikat, alates lihtsatest platvormiseadmetest kuni keerukate füüsikapõhiste simulatsioonideni.

Põhifüüsika, nagu gravitatsioon, hõõrdumine ja kiirendus, rakendamine võib samuti oluliselt parandada kasutajate seotust, lisades mänguobjektidele realistlikkust ja kaalutunnetust.