Читаоци попут вас помажу у подршци МУО. Када обавите куповину користећи везе на нашем сајту, можда ћемо зарадити провизију за партнере. Опширније.

Пигаме пружа неколико уграђених функција за откривање судара између објеката игре. Они су од непроцењиве вредности јер утврђивање тачно када и како се покретни објекти преклапају може бити компликован задатак.

Научите како да додате основну физику и колизије у своју игру помоћу модула пигаме.

Пигаме-ове уграђене функције детекције судара

Најосновнија уграђена функција детекције судара је спритецоллиде. Узима дух, групу духова и логичку вредност која показује да ли би духови требало да "умру" (да буду уклоњени) када се сударе или не. Ова функција враћа листу духова који су се сударили. Ево примера како да га користите:

цоллидед_спритес = пигаме.сприте.спритецоллиде (сприте1, сприте_гроуп, Истина)

Још једна корисна функција детекције колизије је гроупцоллиде, која узима две групе сприте-а и логичку вредност. Ова функција враћа речник са сукобљеним срајтовима као кључевима и спријтовима са којима су се сударили као вредностима. Ево примера како да га користите:

цоллисион_дицт = пигаме.сприте.гроупцоллиде (група1, група2, Истина, Истина)

Креирање основне платформске игре помоћу функције спритецоллиде

Да бисте креирали основну платформерску игру помоћу Пигаме-а, мораћете да креирате срајт играча који корисник може да контролише и платформу на којој ће играч стајати. Можете да користите функцију спритецоллиде да откријете када се сприте играч судари са сприте платформом и спречи да играч пропадне кроз платформу.

За почетак, инсталирајте пигаме модул користећи пип:

пип инсталл пигаме

Након тога, креирајте једноставне класе за Плаиер и Платформу, од којих би оба требало да наследе Пигамеову класу Сприте. Класа Плаиер треба да има метод ажурирања за управљање положајем играча на основу брзине. Такође, требало би да има променљиву и_велоцити да примени ефекат гравитације. Класа Платформ треба да има метод __инит__ који узима координате платформе и креира површину те величине.

Класа играча

Можете креирати класу Плаиер користећи пигаме.сприте. Сприте модул. Ова класа ће иницијализовати играча са датим к и и координатама. Затим ће метода ажурирања ажурирати позицију играча повећањем вредности и_велоцити.

увоз пигаме

класаПлаиер(пигаме.сприте. Сприте):
деф__у томе__(сам, к, и):
супер().__инит__()
селф.имаге = пигаме. Површина((32, 32))
селф.рецт = селф.имаге.гет_рецт (топлефт=(к, и))
селф.и_велоцити = 0

дефажурирање(сам):
селф.рецт.и += селф.и_велоцити

Платформ Цласс

Класа Платформ такође користи пигаме.сприте. Сприте модул. Ова класа ће иницијализовати платформу са датим к и и координатама, као и ширином и висином.

класаПлатформа(пигаме.сприте. Сприте):
деф__у томе__(сам, к, и, ширина, висина):
супер().__инит__()
селф.имаге = пигаме. Површина ((ширина, висина))
селф.рецт = селф.имаге.гет_рецт (топлефт=(к, и))

Тхе Гаме Лооп

Петља игре ће вам омогућити да креирате прозор величине 640к480. Затим ће покренути петљу која ће проверити да ли постоје догађаји, као што је наредба куит. Такође ће проверити било какве колизије између играча и платформе. Коначно, испуниће екран белом бојом, нацртати плејер и платформу, а затим окренути екран.

играч = Играч(100, 300)
плаиер_гроуп = пигаме.сприте. Група()
плаиер_гроуп.адд (плаиер)

платформа = платформа(50, 400, 100, 20)
платформ_гроуп = пигаме.сприте. Група()
платформ_гроуп.адд (платформа)

# Иницијализујте пигаме и креирајте прозор
пигаме.инит()
екран = пигаме.дисплаи.сет_моде((640, 480))

# Главна петља игре
трчање = Истина

док трчање:
за догађај ин пигаме.евент.гет():
ако евент.типе == пигаме. ОДУСТАТИ:
трчање = Фалсе

плаиер_гроуп.упдате()
цоллидед = пигаме.сприте.спритецоллиде (плаиер, платформ_гроуп, Фалсе)

ако сударио:
плаиер.и_велоцити = 0
сцреен.филл((255, 255, 255))
плаиер_гроуп.драв (екран)
платформ_гроуп.драв (екран)
пигаме.дисплаи.флип()

пигаме.куит()

Испод је излаз:

Имплементација гравитације и понашања при скакању

Да бисте применили гравитацију и понашање скакања у својој платформерској игри, мораћете да додате и брзину свом играчком сприте-у и ажурирате његову и позицију у сваком кадру. Да бисте то урадили, можете користити метод ажурирања унутар класе Плаиер и додати следећи исечак кода:

класаПлаиер(пигаме.сприте. Сприте):
деф__у томе__(сам, к, и):
супер().__инит__()
селф.имаге = пигаме. Површина((32, 32))
селф.рецт = селф.имаге.гет_рецт (топлефт=(к, и))
селф.и_велоцити = 0

дефажурирање(сам):
селф.рецт.и += селф.и_велоцити
селф.и_велоцити += ГРАВИТАЦИЈА # Примени гравитацију на и брзину

Сада сваки пут када позовете метод ажурирања, он ће ажурирати позицију играча у складу са његовом брзином и гравитацијом.

Да бисте натерали играча да скочи, можете да повежете акцију скакања за одређени тастер или дугме и ажурирате брзину и играча негативном вредношћу. Следећи исечак кода је пример како да скочите када играч притисне размакницу.

ЈУМП_ВЕЛОЦИТИ = -10

# унутар петље игре
ако евент.типе == пигаме. КЕИДОВН и евент.кеи == пигаме. К_СПАЦЕ:
плаиер.и_велоцити = ЈУМП_ВЕЛОЦИТИ

Имајте на уму да ћете морати да проверите евент.типе да бисте били сигурни да је догађај КЕИДОВН догађај пре провере вредности кључа.

Додавање основне физике као што су трење и убрзање

Да бисте својој платформерској игри додали основну физику као што су трење и убрзање, мораћете да ажурирате к брзину спритеа вашег играча у сваком кадру. Можете додати к брзину у класу играча и ажурирати је на исти начин као и и велоцити. Да бисте применили трење, можете смањити к брзину спритеа играча за малу количину у сваком кадру. На пример, можете додати следећи исечак кода унутар методе ажурирања класе Плаиер:

ФРИЦТИОН = 0.9

класаПлаиер(пигаме.сприте. Сприте):
деф__у томе__(сам, к, и):
супер().__инит__()
селф.имаге = пигаме. Површина((32, 32))
селф.рецт = селф.имаге.гет_рецт (топлефт=(к, и))
селф.и_велоцити = 0
селф.к_велоцити = 0

дефажурирање(сам):
селф.рецт.и += селф.и_велоцити
селф.рецт.к += селф.к_велоцити
селф.и_велоцити += ГРАВИТАЦИЈА # Примени гравитацију на и брзину
селф.к_велоцити *= ТРЕЊЕ # Примени трење на к брзину

Да бисте применили убрзање, можете подесити променљиву, плаиер_мовемент, за хоризонтално кретање и ажурирати к брзину спритеа играча према вредности плаиер_мовемент. То можете да урадите тако што ћете повезати кретање за одређене тастере или дугмад и ажурирати к брзину играча у петљи догађаја, на пример:

УБРЗАЊЕ = 0.5
плаиер_мовемент = 0

ако евент.типе == пигаме. КЕИДОВН:
ако евент.кеи == пигаме. К_ЛЕФТ:
плаиер_мовемент = -1
елиф евент.кеи == пигаме. К_ДЕСНО:
плаиер_мовемент = 1
елиф евент.типе == пигаме. КЕИУП:
ако догађај.кључ ин (пигаме. К_ЛЕФТ, пигаме. К_ДЕСНО):
плаиер_мовемент = 0

плаиер.к_велоцити += плаиер_мовемент * УБРЗАЊЕ

Користећи ове технике, можете креирати једноставну, али забавну платформерску игру користећи Пигаме-ове уграђене функције детекције судара и основну физику. Уз мало креативности и експериментисања, можете користити ове технике за креирање различитих игара и механика игара.

Комплетан код можете пронаћи у ГитХуб спремиште.

Испод је излаз:

Побољшајте ангажовање корисника са колизијама

Многе игре захтевају неки облик детекције судара. Можете користити колизије да креирате широк спектар механике игре, од једноставних платформера до сложених симулација заснованих на физици.

Примена основне физике као што су гравитација, трење и убрзање такође може увелико побољшати ангажовање корисника, додајући реализам и осећај тежине објектима игре.