Patobulinkite savo žaidimų patirtį naudodami Python Arcade žaidimus, įtraukdami kamerą.

Python Arcade biblioteka yra galinga ir patogi 2D žaidimų kūrimo sistema. Viena iš pagrindinių savybių, galinčių labai pagerinti žaidimo ir vartotojo patirtį, yra fotoaparato pridėjimas. Pridėjus kamerą prie žaidimo, galima dinamiškai valdyti peržiūros sritį, o žaidėjas gali tyrinėti didesnius žaidimų pasaulius, sutelkti dėmesį į konkrečias sritis arba sekti judančius objektus.

Perkeldami fotoaparato žiūrėjimo tašką galite sukurti vizualiai patrauklius efektus, pagerinti žaidimo mechaniką ir suteikti daugiau įtraukiančių žaidimų.

Sukurkite paprastą žaidimą

Prieš pradėdami, įdiekite pip savo įrenginyje ir naudokite toliau pateiktą komandą, kad įdiegtumėte arkada modulis:

pip diegimo pasažas

Dabar pradėkite kurdami pagrindinį šoninio slinkimo žaidimą, kuriame žaidėjas valdo personažą, kuris gali judėti kairėn ir dešinėn rodyklių klavišais.

Šiame straipsnyje naudojamas kodas pateikiamas čia GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.

instagram viewer

Be to, galite pridėti kliūtį, kad žaidėjas galėtų naršyti.

importuoti arkada

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
MOVEMENT_SPEED = 5

klasėMano žaidimas(arkada. Langas):
def__init__(savaime, plotis, aukštis):
super().__init__(plotis, aukštis)
self.player_x = plotis // 2
self.player_y = aukštis // 2

defsąranka(savarankiškai):
arcade.set_background_color (arcade.color. DANGAUS MĖLYNUMO)

defon_draw(savarankiškai):
arcade.start_render()
arcade.draw_circle_filled (self.player_x, self.player_y, 20, arcade.color. RAUDONA)
arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color. ŽALIAS)

defatnaujinti(savaime, delta_laikas):
praeiti

defyra_key_press(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ:
self.player_x -= MOVEMENT_SPEED
elifas raktas == arcade.key. DEŠINĖJE:
self.player_x += MOVEMENT_SPEED

jeigu __vardas__ == "__pagrindinis__":
žaidimas = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
game.setup()
arcade.run()

Kameros nustatymas

Norėdami pridėti fotoaparatą prie žaidimo, sukurkite a Fotoaparatas klasė, kuri valdo kameros padėtį ir judėjimą. Ši klasė turės tokius atributus kaip kamera_x ir camera_y išsaugoti fotoaparato koordinates.

klasėFotoaparatas:
def__init__(savarankiškai):
self.camera_x = 0
self.camera_y = 0

Kameros judėjimas su klaviatūros įvestimis

Tada pakeiskite žaidimą yra_key_press būdas įtraukti kamerą judėjimas, pagrįstas žaidėjo įvestimis. Kai grotuvas juda į kairę arba į dešinę, galite atitinkamai atnaujinti fotoaparato padėtį. Taip pat sureguliuokite piešimo kodą, kad perteikdami žaidimo objektus būtų atsižvelgta į fotoaparato padėtį.

klasėMano žaidimas(arkada. Langas):
def__init__(savaime, plotis, aukštis):
super().__init__(plotis, aukštis)
self.camera = Kamera ()
self.player_x = plotis // 2
self.player_y = aukštis // 2

defyra_key_press(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ:
self.player_x -= MOVEMENT_SPEED
self.camera.camera_x -= JUDĖJIMO_GREITIS
elifas raktas == arcade.key. DEŠINĖJE:
self.player_x += MOVEMENT_SPEED
self.camera.camera_x += MOVEMENT_SPEED

defon_draw(savarankiškai):
arcade.start_render()
arcade.set_viewport(
self.camera.camera_x,
self.camera.camera_x + SCREEN_WIDTH,
self.camera.camera_y,
self.camera.camera_y + SCREEN_HEIGHT
)
arcade.draw_circle_filled (self.player_x, self.player_y, 20, arcade.color. RAUDONA)
arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color. ŽALIAS)

Kameros judėjimas su pelės įvestimis

Be klaviatūros įvesties, taip pat galite įjungti fotoaparato judėjimą pagal pelės įvestis. Pavyzdžiui, galite leisti grotuvui pasukti kamerą vilkdami ekraną. Norėdami tai pasiekti, pakeiskite on_mouse_drag būdas atnaujinti fotoaparato padėtį pagal pelės judėjimą.

klasėMano žaidimas(arkada. Langas):
defon_mouse_drag(self, x, y, dx, dy, mygtukai, modifikatoriai):
jeigu mygtukai == pasažas. MOUSE_BUTTON_LEFT:
self.camera.camera_x -= dx
self.camera.camera_y -= dy

Įskaitant papildomas funkcijas

Pridėjus fotoaparatą prie žaidimo atsiveria daugybė papildomų funkcijų ir efektų galimybių. Štai keli pavyzdžiai, kaip galite dar labiau patobulinti žaidimą naudodami fotoaparato sistemą.

Priartinimo funkcija

Norėdami įdiegti priartinimo funkciją, turite įvesti a priartinti kintamasis Fotoaparatas klasę ir modifikuoti on_mouse_scroll būdas atnaujinti priartinimo lygį pagal pelės ratuko judėjimą. Taip pat turite sureguliuoti set_viewport parametrus, kad būtų atsižvelgta į priartinimo lygį.

klasėFotoaparatas:
def__init__(savarankiškai):
self.camera_x = 0
self.camera_y = 0
savarankiškai.zoom = 1.0

klasėMano žaidimas(arkada. Langas):

defon_mouse_scroll(self, x, y, scroll_x, scroll_y):
self.camera.zoom += scroll_y * 0.1

defon_draw(savarankiškai):
arcade.start_render()
arcade.set_viewport(
self.camera.camera_x * self.camera.zoom,
(self.camera.camera_x + SCREEN_WIDTH) * self.camera.zoom,
self.camera.camera_y * self.camera.zoom,
(self.camera.camera_y + SCREEN_HEIGHT) * self.camera.zoom
)
arcade.draw_circle_filled (self.player_x, self.player_y, 20, arcade.color. RAUDONA)
arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color. ŽALIAS)

Sklandus kameros judėjimas

Norėdami pasiekti sklandesnį fotoaparato judėjimą, galite įdiegti interpoliacijos metodą, vadinamą tiesine interpoliacija (lerp). Modifikuoti atnaujinti būdas palaipsniui perkelti fotoaparatą link tikslinės padėties naudojant lerp. Tai sukuria sklandų perėjimo efektą.

klasėFotoaparatas:
def__init__(savarankiškai):
self.camera_x = 0
self.camera_y = 0
self.target_x = 0
self.target_y = 0
self.lerp_speed = 0.1

defatnaujinti(savarankiškai):
self.camera_x = arcade.lerp (self.camera_x, self.target_x, self.lerp_speed)
self.camera_y = arcade.lerp (self.camera_y, self.target_y, self.lerp_speed)

klasėMano žaidimas(arkada. Langas):

defatnaujinti(savaime, delta_laikas):
self.camera.target_x = self.player_x – SCREEN_WIDTH // 2
self.camera.target_y = self.player_y – SCREEN_HEIGHT // 2
self.camera.update()

defon_draw(savarankiškai):
arcade.start_render()
arcade.set_viewport(
self.camera.camera_x,
self.camera.camera_x + SCREEN_WIDTH,
self.camera.camera_y,
self.camera.camera_y + SCREEN_HEIGHT
)
arcade.draw_circle_filled (self.player_x, self.player_y, 20, arcade.color. RAUDONA)
arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color. ŽALIAS)

Kameros apribojimai

Kad fotoaparatas nejudėtų už tam tikrų ribų, galite įvesti apribojimus. Pavyzdžiui, galite nustatyti mažiausią ir didžiausią fotoaparato padėtį ir užtikrinti, kad kamera neviršytų šių ribų.

klasėFotoaparatas:
def__init__(savarankiškai):
self.camera_x = 0
self.camera_y = 0
self.min_x = 0
self.max_x = 800
self.min_y = 0
self.max_y = 600

defatnaujinti(savarankiškai):
self.camera_x = max (self.min_x, min (self.camera_x, self.max_x))
self.camera_y = max (self.min_y, min (self.camera_y, self.max_y))

klasėMano žaidimas(arkada. Langas):

defatnaujinti(savaime, delta_laikas):
self.camera.camera_x = self.player_x – SCREEN_WIDTH // 2
self.camera.camera_y = self.player_y – SCREEN_HEIGHT // 2
self.camera.update()

defon_draw(savarankiškai):
arcade.start_render()
arcade.set_viewport(
self.camera.camera_x,
self.camera.camera_x + SCREEN_WIDTH,
self.camera.camera_y,
self.camera.camera_y + SCREEN_HEIGHT
)
arcade.draw_circle_filled (self.player_x, self.player_y, 20, arcade.color. RAUDONA)
arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color. ŽALIAS)

Tai tik keli pavyzdžiai, kaip galite panaudoti fotoaparato sistemą, kad į savo Python Arcade žaidimus būtų įtrauktos papildomos funkcijos ir efektai.

Taip pat galite pridėti daug kitų papildomų „Python“ žaidimų funkcijų. Pavyzdžiui, galite priversti fotoaparatą prisiminti savo padėtį, kai žaidėjas pereina į kitą lygį. Tai užtikrina, kad vaizdas išliks toks pat, kai pereinate iš vieno lygio į kitą, o žaidėjas galės mėgautis sklandžiai ir nuosekliai.

Geriausia fotoaparato sistemos praktika

Diegiant fotoaparato sistemą Python Arcade žaidime, labai svarbu laikytis geriausios praktikos, kad būtų užtikrintas optimalus funkcionalumas ir sklandi žaidėjo patirtis. Štai keletas pagrindinių gairių, kurių reikia atsiminti:

  • Venkite pernelyg didelio fotoaparato judėjimo: Nors fotoaparatas gali pridėti dinamiškų elementų į žaidimą, labai svarbu išlaikyti pusiausvyrą ir vengti pernelyg didelio fotoaparato judėjimo. Nuolat keičiant fotoaparato padėtį, žaidėjai gali būti dezorientuoti ir jiems gali būti sudėtinga naršyti žaidimų pasaulyje.
  • Išbandykite skirtingas skiriamąsias gebas ir formato koeficientus: būtina išbandyti fotoaparato sistemą naudojant įvairią ekrano skiriamąją gebą ir formato koeficientus, kad įsitikintumėte, jog ji gerai veikia skirtinguose įrenginiuose ir konfigūracijose. Tai padės nustatyti bet kokias problemas, susijusias su peržiūros srities mastelio keitimu, objekto padėties nustatymu arba formato santykio reguliavimu.
  • Optimizuokite atvaizdavimą: fotoaparato sistema gali paveikti žaidimo našumą, ypač atvaizduojant didelius žaidimų pasaulius ar daugybę objektų. Norėdami optimizuoti atvaizdavimą, nustatykite, kurie objektai nepatenka į fotoaparato vaizdą, ir pašalinkite juos iš atvaizdavimo.
  • Tvarkykite kraštinius dėklus: atkreipkite dėmesį į kraštutinius atvejus, kai fotoaparatas gali susidurti su konkrečiais scenarijais, pvz., ribomis, susidūrimo aptikimu arba persidengiančiais objektais. Įsitikinkite, kad fotoaparato sistema šiuos atvejus tvarko grakščiai ir pateikia sklandžius perėjimus arba atitinkamus vaizdinius signalus, rodančius apribojimus arba sąveiką su žaidimo aplinka.

Vadovaudamiesi šia geriausia praktika, galite sukurti tvirtą ir patogią fotoaparato sistemą, kuri sklandžiai integruojasi į jūsų Python Arcade žaidimus.

Padarykite žaidimus linksmesnius naudodami fotoaparatą

Pridėję fotoaparatą prie savo Python Arcade žaidimų, galite žymiai pagerinti žaidėjo įsitraukimą ir įsitraukimą. Nesvarbu, ar tai būtų plataus žaidimų pasaulių kūrimas, dėmesio sutelkimas į svarbias sritis ar judančių objektų stebėjimas, fotoaparatų sistema yra galingas įrankis žaidimų kūrėjams.

Naudodami fotoaparato judėjimą, mastelio keitimą ir papildomus efektus, galite sukurti užburiančią patirtį, kuri sužavės žaidėjus ir leis jiems sugrįžti dar daugiau.