„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:
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 = Tiesakol 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į.