Tokie skaitytojai kaip jūs padeda palaikyti MUO. Kai perkate naudodami nuorodas mūsų svetainėje, galime uždirbti filialų komisinius. Skaityti daugiau.

„Pygame“ siūlo keletą integruotų funkcijų, skirtų žaidimo objektų susidūrimams aptikti. Tai neįkainojama, nes tiksliai nustatyti, kada ir kaip judantys objektai persidengia, gali būti sudėtinga užduotis.

Sužinokite, kaip į žaidimą įtraukti pagrindinę fiziką ir susidūrimus naudodami pygame modulį.

„Pygame“ integruotos susidūrimų aptikimo funkcijos

Paprasčiausia integruota susidūrimo aptikimo funkcija yra spritecollide. Ji paima sprite, spraitų grupę ir loginę reikšmę, rodančią, ar spraitai turi „mirti“ (būti pašalinti), kai jie susiduria. Ši funkcija grąžina susidūrusių spritų sąrašą. Štai pavyzdys, kaip jį naudoti:

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

Kita naudinga susidūrimo aptikimo funkcija yra groupcollide, kuri taip pat apima dvi spritų grupes ir loginę reikšmę. Ši funkcija grąžina žodyną, kuriame yra susidūrę spraitai kaip raktai, o spraitai, su kuriais jie susidūrė, kaip reikšmės. Štai pavyzdys, kaip jį naudoti:

instagram viewer

collision_dict = pygame.sprite.groupcollide (1 grupė, 2 grupė, Tiesa, Tiesa)

Pagrindinio platformingo žaidimo kūrimas naudojant „spritecollide“ funkciją

Norėdami sukurti pagrindinį platformingo žaidimą naudodami Pygame, turėsite sukurti žaidėjo sprite, kurį vartotojas galėtų valdyti, ir platformos sprite, ant kurio žaidėjas galėtų stovėti. Galite naudoti spritecollide funkciją, kad aptiktumėte, kada žaidėjo sprite susiduria su platformos sprite, ir neleistumėte žaidėjui iškristi per platformą.

Pradėti, įdiekite pygame modulį naudodami pip:

pip įdiegti pygame

Po to sukurti paprastas klases grotuvui ir platformai, kurie abu turėtų būti paveldėti iš Pygame's Sprite klasės. Žaidėjų klasėje turėtų būti atnaujinimo metodas, leidžiantis valdyti žaidėjo padėtį pagal greitį. Be to, jame turėtų būti y_velocity kintamasis, kad būtų pritaikytas gravitacijos efektas. Platformos klasėje turėtų būti __init__ metodas, kuris paima platformos koordinates ir sukuria tokio dydžio paviršių.

Žaidėjų klasė

Galite sukurti žaidėjo klasę naudodami pygame.sprite. Sprite modulis. Ši klasė inicijuos grotuvą nurodytomis x ir y koordinatėmis. Tada atnaujinimo metodas atnaujins grotuvo padėtį padidindamas y_velocity reikšmę.

importuoti pygame

klasėŽaidėjas(pygame.sprite. Sprite):
def__init__(savaime, x, y):
super().__init__()
self.image = pygame. Paviršius((32, 32))
self.rect = self.image.get_rect (topleft=(x, y))
self.y_greitis = 0

defatnaujinti(savarankiškai):
self.rekt.y += self.y_velocity

Platformos klasė

Platformos klasė taip pat naudoja pygame.sprite. Sprite modulis. Ši klasė inicijuos platformą su nurodytomis x ir y koordinatėmis, taip pat pločiu ir aukščiu.

klasėPlatforma(pygame.sprite. Sprite):
def__init__(savaime, x, y, plotis, aukštis):
super().__init__()
self.image = pygame. Paviršius ((plotis, aukštis))
self.rect = self.image.get_rect (topleft=(x, y))

Žaidimo kilpa

Žaidimo kilpa leis jums sukurti 640x480 dydžio langą. Tada bus paleista ciklas, kuris patikrins, ar nėra įvykių, pvz., komandą baigti. Jis taip pat patikrins, ar nėra susidūrimų tarp grotuvo ir platformos. Galiausiai jis užpildys ekraną balta spalva, nupieš grotuvą ir platformą, o tada apvers ekraną.

žaidėjas = žaidėjas (100, 300)
player_group = pygame.sprite. Grupė ()
player_group.add (žaidėjas)

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

# Inicijuokite pygame ir sukurkite langą
pygame.init()
ekranas = pygame.display.set_mode((640, 480))

# Pagrindinė žaidimo kilpa
bėgimas = Tiesa

kol veikia:
dėl įvykis in pygame.event.get():
jeigu event.type == pygame. UŽDARYTI:
bėgimas = Netiesa

player_group.update()
susidūrė = pygame.sprite.spritecollide (žaidėjas, platformos_grupė, Netiesa)

jeigu susidūrė:
žaidėjas.y_greitis = 0
screen.fill((255, 255, 255))
player_group.draw (ekranas)
platform_group.draw (ekranas)
pygame.display.flip()

pygame.quit()

Žemiau yra išvestis:

Gravitacijos ir šokinėjimo elgesio įgyvendinimas

Norėdami įgyvendinti savo platformingo žaidimo gravitaciją ir šokinėjimą, turėsite pridėti y greitį prie žaidėjo sprite ir atnaujinti jo y padėtį kiekviename kadre. Norėdami tai padaryti, galite naudoti atnaujinimo metodą Player klasėje ir pridėti šį kodo fragmentą:

klasėŽaidėjas(pygame.sprite. Sprite):
def__init__(savaime, x, y):
super().__init__()
self.image = pygame. Paviršius((32, 32))
self.rect = self.image.get_rect (topleft=(x, y))
self.y_greitis = 0

defatnaujinti(savarankiškai):
self.rekt.y += self.y_velocity
self.y_greitis += GRAVITACIJA # Taikykite gravitaciją y greičiui

Dabar kiekvieną kartą, kai iškviečiate atnaujinimo metodą, jis atnaujins žaidėjo padėtį pagal savo greitį ir sunkumą.

Norėdami priversti žaidėją šokinėti, galite susieti šokinėjimo veiksmą su konkrečiu klavišu arba mygtuku ir atnaujinti žaidėjo y greitį neigiama verte. Šis kodo fragmentas yra pavyzdys, kaip šokinėti, kai žaidėjas paspaudžia tarpo klavišą.

JUMP_VELOCITY = -10

# žaidimo ciklo viduje
jeigu event.type == pygame. KEYDOWN ir event.key == pygame. K_SPACE:
player.y_velocity = JUMP_VELOCITY

Atminkite, kad prieš tikrindami rakto reikšmę turėsite patikrinti event.type, kad įsitikintumėte, jog įvykis yra KEYDOWN įvykis.

Pridedamas pagrindinės fizikos, tokios kaip trintis ir pagreitis

Norėdami į savo platformingo žaidimą įtraukti pagrindinę fiziką, pvz., trintį ir pagreitį, kiekviename kadre turėsite atnaujinti žaidėjo sprite x greitį. Galite pridėti x greitį prie žaidėjų klasės ir atnaujinti jį taip pat, kaip ir y greitį. Norėdami įgyvendinti trintį, kiekviename kadre galite šiek tiek sumažinti grotuvo sprito x greitį. Pavyzdžiui, galite įtraukti šį kodo fragmentą į grotuvo klasės atnaujinimo metodą:

TRINTIS = 0.9

klasėŽaidėjas(pygame.sprite. Sprite):
def__init__(savaime, x, y):
super().__init__()
self.image = pygame. Paviršius((32, 32))
self.rect = self.image.get_rect (topleft=(x, y))
self.y_greitis = 0
savarankiškai.x_greitis = 0

defatnaujinti(savarankiškai):
self.rekt.y += self.y_velocity
self.rect.x += self.x_velocity
self.y_greitis += GRAVITACIJA # Taikykite gravitaciją y greičiui
self.x_greičio *= TRINTIS # Taikykite trintį x greičiui

Norėdami įgyvendinti pagreitį, galite nustatyti horizontalaus judėjimo kintamąjį player_movement ir atnaujinti žaidėjo sprito x greitį pagal žaidėjo_judesio reikšmę. Tai galite padaryti susiedami judesį su tam tikrais klavišais arba mygtukais ir atnaujindami žaidėjo x greitį įvykio cikle, pavyzdžiui:

PAGREITIMAS = 0.5
žaidėjo_judėjimas = 0

jeigu event.type == pygame. KEYDOWN:
jeigu event.key == pygame. K_LEFT:
žaidėjo_judėjimas = -1
elifas event.key == pygame. K_RIGHT:
žaidėjo_judėjimas = 1
elifas event.type == pygame. KEYUP:
jeigu įvykis.raktas in (pygame. K_LEFT, pygame. K_RIGHT):
žaidėjo_judėjimas = 0

žaidėjas.x_velocity += žaidėjo_judėjimas * PAGREITIMAS

Naudodami šiuos metodus galite sukurti paprastą, bet įdomų platformingo žaidimą, naudodami integruotas Pygame susidūrimų aptikimo funkcijas ir pagrindinę fiziką. Turėdami šiek tiek kūrybiškumo ir eksperimentuodami, galite naudoti šiuos metodus kurdami įvairius žaidimus ir žaidimų mechaniką.

Visą kodą galite rasti GitHub saugykla.

Žemiau yra išvestis:

Pagerinkite naudotojų įtraukimą į susidūrimus

Daugeliui žaidimų reikalingas tam tikras susidūrimo aptikimas. Galite naudoti susidūrimus, kad sukurtumėte daugybę žaidimų mechanikos, nuo paprastų platformingų iki sudėtingų fizikos modelių.

Įdiegus pagrindines fizikines priemones, tokias kaip gravitacija, trintis ir pagreitis, taip pat galima labai pagerinti vartotojų įsitraukimą, žaidimo objektams suteikiant tikroviškumo ir svorio pojūtį.