Sužinokite, kaip sumodeliuoti kamerą, kuri galėtų slinkti žaidimo pasaulyje ir suteikti tikroviškumo bei funkcionalumo.
Viena bendra funkcija, kurią rasite daugelyje žaidimų, yra slenkanti kamera, kuri seka jus, kai judate žaidimų pasaulyje. Šis efektas gali suteikti žaidimui gilumo ir tikroviškumo bei pagerinti bendrą žaidimo patirtį.
Yra daug skirtingų būdų, kaip įdiegti slenkančią kamerą PyGame, todėl įsitikinkite, kad suprantate jų skirtumus.
Paprasto žaidimo kūrimas
Prieš pradėdami, įdiekite pip savo įrenginyje ir naudokite toliau pateiktą komandą, kad įdiegtumėte PyGame modulį:
pip įdiegti pygame
Dabar galite sukurti paprastą žaidimą su žaidėjo stačiakampiu ir dviem statinėmis platformomis. Žaidėjas gali judėti į kairę ir į dešinę rodyklių klavišais.
Visą projekto kodą galite rasti čia „GitHub“ atpirkimas.
Pradėkite importuodami pygame modulį. Tada inicijuokite jį ir sukurkite žaidimo langą naudodami pygame.display.set_mode() funkcija. Tada nustatykite lango antraštę ir sukurkite laikrodžio objektas kadrų dažniui valdyti.
importuoti pygame
pygame.init()
WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600ekranas = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption(„Mano paprastas žaidimas“)
laikrodis = pygame.time. Laikrodis()
BACKGROUND_COLOR = (255, 255, 255)
Tada nustatykite grotuvą ir statines platformas. Apibrėžkite žaidėjo dydį ir pradinę padėtį.
PLAYER_WIDTH = 50
PLAYER_HEIGHT = 50player_x = WINDOW_WIDTH // 2 - PLAYER_WIDTH // 2
player_y = WINDOW_HEIGHT – PLAYER_HEIGHT – 20PLAYER_SPEED = 10
RECTANGLE_COLOR_1 = (255, 0, 0)
RECTANGLE_COLOR_2 = (0, 0, 255)
stačiakampis_1 = pygame. Rect(200, 200, 100, 100)
stačiakampis_2 = pygame. Rect(500, 300, 150, 50)
Tada sukurkite žaidimo kilpą, kuri tvarko įvykius ir atnaujina ekraną. Ciklo metu patikrinkite, ar nėra įvykių, pvz., išėjimas iš žaidimo arba žaidėjo perkėlimas rodyklių klavišais.
kolTiesa:
# Tvarkykite įvykius
dėl įvykis in pygame.event.get():
jeigu event.type == pygame. UŽDARYTI:
pygame.quit()
išeiti ()# Nupieškite foną
screen.fill (BACKGROUND_COLOR)# Nubrėžkite statinius stačiakampius
pygame.draw.rect (ekranas, RECTANGLE_COLOR_1, rectangle_1)
pygame.draw.rect (ekranas, RECTANGLE_COLOR_2, rectangle_2)# Nupieškite grotuvą
player_rect = pygame. Tiesiai (player_x, player_y, PLAYER_WIDTH,
PLAYER_HEIGHT)pygame.draw.rect (ekranas, (0, 0, 0), žaidėjas_tiesiogiai)
# Atnaujinkite ekraną
pygame.display.update()
# Apribokite kadrų dažnį
laikrodis.tick(30)
Kameros nustatymas
Dabar, kai turite paprastą žaidimą su žaidėjo stačiakampiu ir dviem statinėmis platformomis, galite pradėti dirbti su kamera. „PyGame“ kamera iš esmės yra tik poslinkis, kuris veikia visus objektus, kuriuos piešiate į ekraną. Tai reiškia, kad jei perkelsite kamerą į kairę, viskas, kas rodoma ekrane, judės į dešinę.
Norėdami nustatyti kamerą, pirmiausia turite apibrėžti kintamąjį, kad būtų išlaikytas fotoaparato X poslinkis. Iškvieskite šį kintamąjį camera_offset_x ir inicijuokite jį į 0.
# Nustatykite fotoaparato poslinkį
camera_offset_x = 0
Tada atnaujinkite visų objektų, kuriuos piešiate ekrane, padėtis, kad būtų atsižvelgta į fotoaparato poslinkį. Tai galite padaryti pridėdami camera_offset_x reikšmę į kiekvieno objekto X padėtį. Pavyzdžiui, galite atnaujinti žaidėjo poziciją taip:
# Nupieškite grotuvą
player_rect = pygame. Tiesiai (player_x + camera_offset_x, player_y, PLAYER_WIDTH,
PLAYER_HEIGHT)
pygame.draw.rect (ekranas, (0, 0, 0), žaidėjas_tiesiogiai)
Panašiai galite atnaujinti statinių platformų pozicijas taip:
# Nubrėžkite statinius stačiakampius
rectangle_1_draw_pos = stačiakampis_1.move (camera_offset_x, 0)
pygame.draw.rect (ekranas, RECTANGLE_COLOR_1, rectangle_1_draw_pos)
rectangle_2_draw_pos = stačiakampis_2.move (camera_offset_x, 0)
pygame.draw.rect (ekranas, RECTANGLE_COLOR_2, rectangle_2_draw_pos)
Fotoaparato perkėlimas naudojant klaviatūros įvestis
Dabar, kai nustatėte fotoaparatą, galite pradėti jį perkelti. Vienas iš būdų tai padaryti yra perkelti kamerą reaguojant į klaviatūros įvestis. Pavyzdžiui, galite perkelti kamerą į kairę, kai grotuvas paspaudžia kairįjį rodyklės klavišą.
Norėdami tai padaryti, įtraukite šį kodą į įvykio kilpą, kuri apdoroja klaviatūros įvestis:
jeigu event.type == pygame. KEYDOWN:
jeigu event.key == pygame. K_LEFT:
camera_offset_x -= PLAYER_SPEED
elifas event.key == pygame. K_RIGHT:
camera_offset_x += PLAYER_SPEED
Kitas būdas yra pakeisti grotuvo x koordinatę klaviatūros paspaudimu ir atnaujinti kameros poslinkį. Tai galite įgyvendinti taip:
# Tvarkykite įvykius
dėl įvykis in pygame.event.get():
jeigu event.type == pygame. UŽDARYTI:
pygame.quit()
išeiti ()
jeigu event.type == pygame. KEYDOWN:
jeigu event.key == pygame. K_LEFT:
player_x -= PLAYER_SPEED
elifas event.key == pygame. K_RIGHT:
player_x += PLAYER_SPEED
Tada galite atnaujinti fotoaparato poslinkį grotuvo x koordinatės atžvilgiu taip:
camera_offset_x = WINDOW_WIDTH // 2 - žaidėjas_x - PLAYER_WIDTH // 2
Fotoaparato perkėlimas naudojant pelės įvestis
Kitas būdas perkelti fotoaparatą yra naudoti pelę. Galite leisti grotuvui vilkti ekraną spustelėdami ir vilkdami pelę.
Norėdami tai padaryti, stebėkite pelės padėtį, kai grotuvas paspaudžia kairįjį pelės mygtuką. Kai jie pajudina pelę, atnaujinkite žaidėjo x koordinates. Jis turėtų keistis skirtumu tarp dabartinės pelės padėties ir pradinės padėties, kurią stebėjote, mouse_start_pos.
# Tvarkykite įvykius
dėl įvykis in pygame.event.get():
jeigu event.type == pygame. UŽDARYTI:
pygame.quit()
išeiti ()jeigu event.type == pygame. MOUSE BUTTONDOWN:
jeigu įvykis.mygtukas == 1:
mouse_start_pos = pygame.mouse.get_pos()
jeigu event.type == pygame. MOUSE MOTION:
jeigu pygame.mouse.get_pressed()[0]:
mouse_current_pos = pygame.mouse.get_pos()
mouse_offset_x = pelės_dabartinė_pozicija[0] - pelės_pradžios_pozicija[0]
grotuvas_x - = pelės_offset_x
mouse_start_pos = pelės_dabartinė_pozicija
Daugiau fotoaparato funkcijų pridėjimas
Be slenkančio fotoaparato efekto, galite pridėti keletą kitų su fotoaparatu susijusių funkcijų, kad pagerintumėte žaidimo patirtį. Viena iš tokių funkcijų yra priartinimo kameros efektas, leidžiantis žaidėjui priartinti arba nutolinti žaidimų pasaulį. Šį efektą galite pasiekti keisdami žaidimo lango dydį ir ekrane nupieštų objektų mastelį.
Norėdami tai padaryti, nustatykite mastelio keitimo kintamąjį, kuris išsaugos dabartinį žaidimo mastelio keitimo lygį. Nustatykite pradinę vertę į 1,0, o tai reiškia, kad mastelio nėra. Tada apibrėžkite funkciją, kuri apskaičiuos pakeistą objekto dydį pagal dabartinį mastelio keitimo lygį.
priartinti = 1.0
defget_scaled_size(dydis):
grąžinti int (dydis * mastelio keitimas)
Tada atnaujinkite ekrane nupieštų objektų padėtis ir dydžius naudodami get_scaled_size funkcija. Pavyzdžiui, galite atnaujinti žaidėjo padėtį ir dydį taip:
player_rect = pygame. Rect(
get_scaled_size (player_x + camera_offset_x),
get_scaled_size (player_y),
get_scaled_size (PLAYER_WIDTH),
get_scaled_size (PLAYER_HEIGHT)
)
Panašiai atnaujinkite statinių platformų padėtis ir dydžius taip:
rectangle_1_draw_pos = pygame. Rect(
get_scaled_size (stačiakampis_1.x + camera_offset_x),
get_scaled_size (stačiakampis_1.y),
get_scaled_size (stačiakampis_1.plotis),
get_scaled_size (stačiakampis_1.aukštis)
)pygame.draw.rect (ekranas, RECTANGLE_COLOR_1, rectangle_1_draw_pos)
rectangle_2_draw_pos = pygame. Rect(
get_scaled_size (stačiakampis_2.x + camera_offset_x),
get_scaled_size (stačiakampis_2.y),
get_scaled_size (stačiakampis_2.plotis),
get_scaled_size (stačiakampis_2.aukštis)
)
pygame.draw.rect (ekranas, RECTANGLE_COLOR_2, rectangle_2_draw_pos)
Padidinkite arba sumažinkite priartinimo lygį 0,1, kai grotuvas paspaus = arba - atitinkamai raktas. Nustatykite naują žaidimo lango dydį pagal dabartinį mastelio keitimo lygį. Norėdami tai padaryti, įtraukite šį kodą į įvykio kilpą, kuri apdoroja klaviatūros įvestis:
jeigu event.type == pygame. KEYDOWN:
jeigu event.key == pygame. K_EQUALS:
priartinti += 0.1ekranas = pygame.display.set_mode((
int (WINDOW_WIDTH * mastelio keitimas),
int (WINDOW_HEIGHT * mastelio keitimas)
))
elifas event.key == pygame. K_MINUSAS:
priartinti -= 0.1jeigu priartinti < 0.1:
priartinti = 0.1
ekranas = pygame.display.set_mode((
int (WINDOW_WIDTH * mastelio keitimas),
int (WINDOW_HEIGHT * mastelio keitimas)
))
Naudodami aukščiau pateiktą kodą, sėkmingai įtraukėte priartinimo kameros efektą į mūsų PyGame žaidimą. Sujungę šią funkciją su slenkančio fotoaparato efektu, galite sukurti dinamišką ir patrauklų žaidimo patirtį.
Žaidimo tobulinimas naudojant fotoaparato judesius
Slenkančios kameros pridėjimas prie PyGame žaidimo ne tik pagerina vaizdinę patirtį, bet ir pagerina žaidimo eigą. Tai leidžia žaidėjui pamatyti daugiau žaidimo pasaulio, geriau suprasti aplinką ir lengviau naršyti.
Taip pat galite naudoti fotoaparato judesius, kad sukurtumėte specialiuosius efektus, pvz., priartintumėte ir nutolintumėte arba kratydami ekraną, kad imituotumėte sprogimus ar žemės drebėjimus.