Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju. Lasīt vairāk.

Pygame nodrošina vairākas iebūvētas funkcijas, lai noteiktu sadursmes starp spēles objektiem. Tie ir nenovērtējami, jo precīzi noteikt, kad un kā kustīgie objekti pārklājas, var būt sarežģīts uzdevums.

Uzziniet, kā pievienot savai spēlei pamata fiziku un sadursmes, izmantojot pygame moduli.

Pygame iebūvētās sadursmju noteikšanas funkcijas

Visvienkāršākā iebūvētā sadursmes noteikšanas funkcija ir spritecollide. Tas aizņem spraitu, spraitu grupu un Būla vērtību, kas norāda, vai spraitiem ir vai nav "jāmirst" (jāizņem), kad tie saduras. Šī funkcija atgriež sarakstu ar spraitiem, kas ir sadūrušies. Šeit ir piemērs, kā to izmantot:

collided_sprites = pygame.sprite.spritecollide (sprite1, sprite_group, Taisnība)

Vēl viena noderīga sadursmes noteikšanas funkcija ir groupcollide, kas ietver divas spraitu grupas un Būla vērtību. Šī funkcija atgriež vārdnīcu ar sadursmes spraitiem kā taustiņiem un spraitiem, ar kuriem tie sadūrās kā vērtībām. Šeit ir piemērs, kā to izmantot:

collision_dict = pygame.sprite.groupcollide (1. grupa, 2. grupa, Taisnība, Taisnība)

Pamata platformera spēles izveide, izmantojot spritecollide funkciju

Lai izveidotu pamata platformas spēli, izmantojot Pygame, jums būs jāizveido spēlētāja sprite, kuru lietotājs var kontrolēt, un platformas sprite, kurā spēlētājs var stāvēt. Varat izmantot spritecollide funkciju, lai noteiktu, kad spēlētāja spraits saduras ar platformas spraitu, un neļautu spēlētājam izkrist cauri platformai.

Sākt, instalējiet pygame moduli, izmantojot pip:

pip instalēt pygame

Pēc tam, izveidot vienkāršas klases Spēlētājam un Platformai, kurām abām jābūt mantotām no Pygame Sprite klases. Spēlētāju klasei ir jābūt atjaunināšanas metodei, lai apstrādātu spēlētāja pozīciju, pamatojoties uz ātrumu. Turklāt tam ir jābūt mainīgajam y_velocity, lai izmantotu gravitācijas efektu. Platformas klasei ir jābūt __init__ metodei, kas ņem platformas koordinātas un izveido virsmu ar šādu izmēru.

Spēlētāju klase

Spēlētāja klasi var izveidot, izmantojot pygame.sprite. Sprite modulis. Šī klase inicializēs atskaņotāju ar noteiktām x un y koordinātām. Pēc tam atjaunināšanas metode atjauninās atskaņotāja pozīciju, palielinot y_velocity vērtību.

imports pygame

klasēSpēlētājs(pygame.sprite. Sprite):
def__tajā__(sevis, x, y):
super().__init__()
self.image = pygame. Surface((32, 32))
self.rekts = self.image.get_rect (topleft=(x, y))
self.y_velocity = 0

defAtjaunināt(pats):
self.rekts.y += self.y_velocity

Platformas klase

Platformas klase izmanto arī pygame.sprite. Sprite modulis. Šī klase inicializēs platformu ar norādītajām x un y koordinātām, kā arī platumu un augstumu.

klasēPlatforma(pygame.sprite. Sprite):
def__tajā__(sevis, x, y, platums, augstums):
super().__init__()
self.image = pygame. Virsma ((platums, augstums))
self.rekts = self.image.get_rect (topleft=(x, y))

Spēles cilpa

Spēles cilpa ļaus jums izveidot logu ar izmēru 640x480. Pēc tam tiks palaists cilpa, kas pārbaudīs notikumus, piemēram, komandu iziet. Tas arī pārbaudīs, vai nav sadursmes starp atskaņotāju un platformu. Visbeidzot, tas aizpildīs ekrānu ar baltu krāsu, uzzīmēs atskaņotāju un platformu un pēc tam apvērs displeju.

spēlētājs = spēlētājs (100, 300)
player_group = pygame.sprite. Grupa()
player_group.add (spēlētājs)

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

# Inicializējiet pygame un izveidojiet logu
pygame.init()
ekrāns = pygame.display.set_mode((640, 480))

# Galvenā spēles cilpa
skriešana = Taisnība

kamēr darbojas:
priekš notikumu iekšā pygame.event.get():
ja event.type == pygame. IZIET:
skriešana = Nepatiesi

player_group.update()
sadūrās = pygame.sprite.spritecollide (spēlētājs, platformas_grupa, Nepatiesi)

ja sadūrās:
player.y_velocity = 0
screen.fill((255, 255, 255))
player_group.draw (ekrāns)
platform_group.draw (ekrāns)
pygame.display.flip()

pygame.quit()

Zemāk ir izvade:

Gravitācijas un lēkšanas uzvedības īstenošana

Lai savā platformera spēlē īstenotu gravitācijas un lēkšanas uzvedību, spēlētāja spraitam būs jāpievieno y ātrums un jāatjaunina tā y pozīcija katrā kadrā. Lai to izdarītu, atskaņotāja klasē varat izmantot atjaunināšanas metodi un pievienot šādu koda fragmentu:

klasēSpēlētājs(pygame.sprite. Sprite):
def__tajā__(sevis, x, y):
super().__init__()
self.image = pygame. Surface((32, 32))
self.rekts = self.image.get_rect (topleft=(x, y))
self.y_velocity = 0

defAtjaunināt(pats):
self.rekts.y += self.y_velocity
self.y_velocity += GRAVITĀTE # Pielietojiet gravitāciju y ātrumam

Tagad katru reizi, kad izsaucat atjaunināšanas metodi, tā atjauninās spēlētāja pozīciju atbilstoši tā ātrumam un smagumam.

Lai liktu spēlētājam spraitam lēkt, varat saistīt lēciena darbību ar noteiktu taustiņu vai pogu un atjaunināt spēlētāja y ātrumu ar negatīvu vērtību. Šis koda fragments ir piemērs tam, kā lēkt, kad spēlētājs nospiež atstarpes taustiņu.

JUMP_ĀTRUMS = -10

# spēles cilpas iekšpusē
ja event.type == pygame. KEYDOWN un event.key == pygame. K_SPACE:
player.y_velocity = JUMP_VELOCITY

Ņemiet vērā, ka pirms atslēgas vērtības pārbaudes jums būs jāpārbauda event.type, lai pārliecinātos, ka notikums ir KEYDOWN notikums.

Pievienojot pamata fizikas, piemēram, berzi un paātrinājumu

Lai platformas spēlei pievienotu pamata fiziku, piemēram, berzi un paātrinājumu, jums būs jāatjaunina spēlētāja spraita ātrums x katrā kadrā. Spēlētāju klasei varat pievienot x ātrumu un atjaunināt to tāpat kā y ātrumu. Lai īstenotu berzi, katrā kadrā varat samazināt atskaņotāja spraita x ātrumu par nelielu daudzumu. Piemēram, atskaņotāja klases atjaunināšanas metodē varat pievienot šādu koda fragmentu:

BERZE = 0.9

klasēSpēlētājs(pygame.sprite. Sprite):
def__tajā__(sevis, x, y):
super().__init__()
self.image = pygame. Surface((32, 32))
self.rekts = self.image.get_rect (topleft=(x, y))
self.y_velocity = 0
self.x_velocity = 0

defAtjaunināt(pats):
self.rekts.y += self.y_velocity
self.rekts.x += self.x_velocity
self.y_velocity += GRAVITĀTE # Pielietojiet gravitāciju y ātrumam
self.x_velocity *= BERZE # Pielietojiet berzi uz x ātrumu

Lai ieviestu paātrinājumu, horizontālajai kustībai varat iestatīt mainīgo player_movement un atjaunināt atskaņotāja spraita ātrumu x atbilstoši player_movement vērtībai. To var izdarīt, piesaistot kustību konkrētiem taustiņiem vai pogām un atjauninot spēlētāja ātrumu x notikumu cilpā, piemēram:

PAĀCINĀJUMS = 0.5
player_movement = 0

ja event.type == pygame. KEYDOWN:
ja event.key == pygame. K_LEFT:
player_movement = -1
elifs event.key == pygame. K_RIGHT:
player_movement = 1
elifs event.type == pygame. KEYUP:
ja notikums.atslēga iekšā (pygame. K_LEFT, pygame. K_RIGHT):
player_movement = 0

player.x_velocity += player_movement * ACCELERATION

Izmantojot šīs metodes, varat izveidot vienkāršu, bet jautru platformas spēli, izmantojot Pygame iebūvētās sadursmju noteikšanas funkcijas un pamata fiziku. Ar nelielu radošuma un eksperimentu palīdzību jūs varat izmantot šīs metodes, lai izveidotu dažādas spēles un spēļu mehāniku.

Pilnu kodu varat atrast vietnē GitHub repozitorijs.

Zemāk ir izvade:

Uzlabojiet lietotāju iesaisti sadursmju gadījumā

Daudzām spēlēm ir nepieciešama kāda veida sadursmes noteikšana. Varat izmantot sadursmes, lai izveidotu plašu spēļu mehānikas klāstu, sākot no vienkāršiem platformeriem līdz sarežģītām uz fiziku balstītām simulācijām.

Pamatfizikas, piemēram, gravitācijas, berzes un paātrinājuma, ieviešana var arī ievērojami uzlabot lietotāju iesaisti, pievienojot spēļu objektiem reālismu un svara sajūtu.