Python's Arcade biblioteka apima nuo paprasčiausių spalvų animacijos iki sudėtingo dalelių modeliavimo.
Animacija vaidina labai svarbų vaidmenį didinant vaizdo žaidimų patrauklumą ir įtraukimą. „Arcade“ biblioteka yra „Python“ sistema, skirta kurti 2D žaidimus. Tai yra paprastas ir efektyvus būdas įtraukti animaciją į žaidimų projektus.
Galite naudoti „Arcade“ biblioteką kurdami pagrindines judesių animacijas ir sinchronizuotas animacijas su žaidimo įvykiais.
Sukurkite paprastą žaidimą
Prieš pradėdami įsitikinkite, kad turite pip įdiegtas jūsų įrenginyje. Norėdami įdiegti arkadų biblioteką, naudokite šią komandą:
pip diegimo pasažas
Po to sukurkite Python failą pavadinimu paprastas žaidimas.py ir pradėkite nustatydami žaidimą, kuriame žaidėjas gali judėti į kairę ir į dešinę.
Šiame straipsnyje naudojamas kodas pateikiamas čia GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.
Naudodami Arkados biblioteką galite sukurti langą, nustatyti žaidimo aplinką ir tvarkyti žaidėjo įvestį. Norėdami pradėti, pateikiame kodo fragmentą:
importuoti arkada
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600klasėMano žaidimas(arkada. Langas):
def__init__(savarankiškai):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Mano žaidimas")
self.player_x = SCREEN_WIDTH // 2
self.player_y = EKRANO AUKŠTIS // 2defon_draw(savarankiškai):
arcade.start_render()
col = arcade.color. MĖLYNA
arcade.draw_circle_filled (self.player_x, self.player_y, 20, stulpelis)defyra_key_press(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ:
self.player_x -= 10
elifas raktas == arcade.key. DEŠINĖJE:
self.player_x += 10defpagrindinis():
žaidimas = MyGame()
arcade.run()
jeigu __vardas__ == "__pagrindinis__":
pagrindinis ()
Pridėti pagrindinę judesio animaciją
Dabar ženkite žaidimą dar vienu žingsniu ir pridėkite pagrindinę judesio animaciją prie žaidėjo objekto. Norėdami animuoti žaidėjas juda, sukurkite 3 skirtingus apskritimus ir pakartokite juos iš eilės, kai žaidėjas pradeda judėti. Štai atnaujintas kodo fragmentas judėjimas-animacija.py failas:
klasėMano žaidimas(arkada. Langas):
def__init__(savarankiškai):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Mano žaidimas")
self.player_x = SCREEN_WIDTH // 2
self.player_y = EKRANO AUKŠTIS // 2
self.frame_counter = 0defon_draw(savarankiškai):
arcade.start_render()
col1 = arcade.color. MĖLYNA
col2 = arkada.spalva. ŽALIAS
col3 = arcade.color. RAUDONAjeigu self.frame_counter < 10:
arcade.draw_circle_filled (self.player_x, self.player_y, 20,1 stulpelis)
elifas self.frame_counter < 20:
arcade.draw_circle_filled (self.player_x, self.player_y, 20,2 stulpelis)
Kitas:
arcade.draw_circle_filled (self.player_x, self.player_y, 20, 3 stulpelis)
defyra_key_press(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ:
self.player_x -= 10
self.frame_counter = (self.frame_counter + 1) % 30
elifas raktas == arcade.key. DEŠINĖJE:
self.player_x += 10
self.frame_counter = (self.frame_counter + 1) % 30
Štai išvesties rėmelio pavyzdys:
Animacijos greičio ir krypties valdymas
Norėdami valdyti animacijos greitį, galite įdiegti kadrų dažnio sistemą. Taip pat galite keisti kadrų tvarką, priklausomai nuo žaidėjo judėjimo krypties. Kai grotuvas juda iš kairės į dešinę, kadrai bus rodomi atvirkštine tvarka.
Štai pakeistas kodo fragmentas kadrų dažnis.py failas:
klasėMano žaidimas(arkada. Langas):
def__init__(savarankiškai):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Mano žaidimas")
self.player_x = SCREEN_WIDTH // 2
self.player_y = EKRANO AUKŠTIS // 2
self.frame_counter = 0
col1 = arcade.color. MĖLYNA
col2 = arkada.spalva. ŽALIAS
col3 = arcade.color. RAUDONA
self.frames = [stulpelis1, stulpelis2, stulpelis3]
self.frame_rate = 10defon_draw(savarankiškai):
arcade.start_render()
frame_index = self.frame_counter // self.frame_rate % len (self.frames)jeigu self.player_x < SCREEN_WIDTH // 2:
frame_index = len (self.frames) – 1 - rėmo_indeksasindeksas = self.frames[frame_index]
arcade.draw_circle_filled (self.player_x, self.player_y, 20, indeksas)
defyra_key_press(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ:
self.player_x -= 10
self.frame_counter += 1
elifas raktas == arcade.key. DEŠINĖJE:
self.player_x += 10
self.frame_counter += 1
Naudokite modulio operatorių % su len (self.frames) siekiant užtikrinti, kad rėmo_indeksas visada lieka galimų kadrų diapazone. Tai užkerta kelią Indekso klaida neįvyksta, kai animacija prasiskverbia per kadrus.
Sureguliuokite kadrų dažnis reikšmę, kad galėtumėte valdyti animacijos greitį ir mėgautis animuotu žaidimo objektų judėjimu.
Įskaitant papildomas funkcijas
„Arcade“ bibliotekoje yra įvairių funkcijų, skirtų jūsų animacijai patobulinti.
Dalelių efektai
Norėdami suteikti žaidimui tikroviškumo, galite sukurti dalelių efektus, pvz., sprogimus ar dūmus. Sukurkite failą pavadinimu dalelė.py ir pridėkite toliau pateiktą kodą paprastam dalelių sistemos įgyvendinimui naudojant Python ir arkadinę biblioteką:
importuoti arkada
importuoti atsitiktinis# Ekrano matmenys
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600# Spalvos
BALTAS = (255, 255, 255)# Dalelių klasė
klasėDalelė:
def__init__(savaime, x, y, dx, dy, spindulys, spalva, gyvenimo trukmė):
savarankiškai.x = x
pats.y = y
savarankiškai.dx = dx
savarankiškai.dy = dy
savaime.spindulys = spindulys
savaime.spalva = spalva
savęs.gyvenimo trukmė = gyvenimo trukmėdefatnaujinti(savarankiškai):
self.x += self.dx
self.y += self.dy
savęs.gyvenimo trukmė -= 1defpiešti(savarankiškai):
arcade.draw_circle_filled (self.x, self.y, self.radius, self.color)# Žaidimo klasė
klasėMano žaidimas(arkada. Langas):
def__init__(savaime, plotis, aukštis):
super().__init__(plotis, aukštis, "Dalelių pavyzdys")
self.partticles = []defsąranka(savarankiškai):
# Sukurkite daleles
dėl _ in diapazonas(100):
x = atsitiktinis.randrange (SCREEN_WIDTH)
y = atsitiktinis.randrange (SCREEN_HEIGHT)
dx = atsitiktinis.uniform(-1, 1)
dy = atsitiktinis.uniform(-1, 1)
spindulys = atsitiktinis.uniform(2, 5)
spalva = arkada.spalva. BALTAS
gyvenimo trukmė = random.randint(60, 120)
dalelė = dalelė (x, y, dx, dy, spindulys, spalva, gyvavimo trukmė)
savarankiškai.dalelės.pridėti (dalelė)defon_draw(savarankiškai):
arcade.start_render()
dėl dalelė in savaiminės dalelės:
dalelė.draw()defatnaujinti(savaime, delta_laikas):
dėl dalelė in savaiminės dalelės:
particle.update()jeigu dalelė.gyvenimo trukmė <= 0:
self.partticles.remove (dalelė)defpagrindinis():
žaidimas = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
game.setup()
arcade.run()
jeigu __vardas__ == "__pagrindinis__":
pagrindinis ()
Turėtumėte pamatyti animaciją, kurioje yra daug judančių dalelių:
Interaktyvios animacijos
Įdiekite interaktyvias animacijas, kurios reaguoja į vartotojo įvestį arba žaidimo įvykius. Pavyzdžiui, kai žaidėjas sąveikauja su objektu, jis gali animuoti, pakeisti spalvą arba kokiu nors būdu transformuotis. Šios interaktyvios animacijos suteikia grįžtamąjį ryšį ir padidina žaidėjo įsitraukimą į žaidimą. Štai kodas, skirtas interactive-animation.py failas:
importuoti arkada
# Ekrano matmenys
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600# Spalvos
BALTAS = (255, 255, 255)
RAUDONA = (255, 0, 0)klasėMano žaidimas(arkada. Langas):
def__init__(savaime, plotis, aukštis):
super().__init__(plotis, aukštis, "Interaktyvi animacija")
self.player_x = 400
self.player_y = 300
self.player_radius = 30
self.player_color = RAUDONA
self.animation_radius = 60
self.animation_color = BALTAS
self.animation_active = Netiesadefon_draw(savarankiškai):
arcade.start_render()arcade.draw_circle_filled (self.player_x,
self.player_y,
self.player_radius,
self.player_color)jeigu self.animation_active:
arcade.draw_circle_filled (self.player_x,
self.player_y,
self.animation_radius,
self.animation_color)defon_mouse_press(savaime, x, y, mygtukas, modifikatoriai):
jeigu (self.player_x – self.player_radius <=
x <= self.player_x + self.player_radius ir
self.player_y – self.player_radius <=
y <= self.player_y + self.player_radius
):
self.animation_active = Tiesadefatnaujinti(savaime, delta_laikas):
jeigu self.animation_active:
self.animation_radius += 1jeigu self.animation_radius > 100:
self.animation_active = Netiesa
self.animation_radius = 0defpagrindinis():
žaidimas = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()
jeigu __vardas__ == "__pagrindinis__":
pagrindinis ()
Nepaisykite būtinų metodų, pvz on_draw, on_mouse_press, ir atnaujinti, kad galėtumėte piešti grotuvą ir animaciją, tvarkyti pelės paspaudimus ir atnaujinti animaciją.
Norėdami nupiešti grotuvą, naudokite arcade.draw_circle_filled funkcija, kuri paima (x, y) centro, spindulio ir spalvos koordinates kaip argumentus. Funkcija draw_circle_filled yra viena iš Arkados įrankiai, kuriuos galite naudoti žaidimo turtui piešti. Tokiu atveju galite nubrėžti augantį apskritimą, laikui bėgant keisdami spindulį.
The on_mouse_press metodas veikia, kai vartotojas spusteli pelę. Jis patikrina, ar pelės koordinatės yra žaidėjo objekto ribose, ir suaktyvina animaciją, jei jos yra.
Geriausia animacijos pridėjimo praktika
Pridėdami animaciją prie žaidimų, atsižvelkite į šiuos geriausios praktikos pavyzdžius:
Apribokite animacijų skaičių
Daugybė animacijų su daugybe kadrų gali turėti įtakos našumui. Apsvarstykite galimybę sumažinti reikalingų animacijų ar kadrų skaičių, ypač nekritiniams žaidimo elementams. Animacijų supaprastinimas gali padėti išlaikyti pastovų kadrų dažnį ir optimizuoti išteklių naudojimą.
Panašių objektų paketinis atvaizdavimas
Sugrupuokite panašius objektus, turinčius tuos pačius animacijos kadrus ir tekstūras, ir atvaizduokite juos kaip paketą. Paketas sumažina burtų traukimo skambučių skaičių, todėl pagerėja našumas. Ši technika ypač naudinga animuojant objektus, kuriuose naudojamas tas pats sprite lapas arba panašios animacijos sekos.
Naudokite interpoliaciją sklandžiai animacijai
Norėdami pasiekti sklandų animacijos perėjimą, naudokite interpoliacijos metodus, pvz., tiesinę interpoliaciją (lerpingą). Interpoliacija apskaičiuoja tarpines reikšmes tarp animacijos pagrindinių kadrų, kad būtų sukurti sklandūs judesiai. Šis metodas apsaugo nuo staigių šuolių ar trūkčiojančių judesių tarp kadrų, todėl animacija atrodo patrauklesnė.
Apsvarstykite animacijos greitį ir laiką
Eksperimentuokite su skirtingu animacijos greičiu ir laiku, kad rastumėte tinkamą žaidimo balansą. Koreguokite kadro trukmę arba naudokite skirtingas animacijos sekas, kad sukurtumėte greičio, pagreičio ar lėtėjimo skirtumus. Šie koregavimai gali suteikti žaidimo animacijai gylio ir charakterio.
Išbandykite ir optimizuokite
Reguliariai tikrinkite savo animacijas skirtinguose įrenginiuose ir stebėkite našumą. Ieškokite galimų kliūčių ar sulėtėjimo ir atitinkamai optimizuokite. Šis procesas padeda užtikrinti sklandžią ir nuoseklią animacijos patirtį įvairiuose įrenginiuose.
Padarykite žaidimus patrauklesnius su animacija
Animacijos pridėjimas prie žaidimų gali žymiai padidinti žaidėjų įsitraukimą ir panardinimą. Animacijos suteikia vaizdinį grįžtamąjį ryšį apie žaidėjo veiksmus, todėl žaidimas tampa intuityvesnis ir malonesnis. Jie atgaivina žaidimų pasaulius, sukurdami tikroviškumo ir jaudulio jausmą.
Nesvarbu, ar tai būtų bėgantis veikėjas, sprogstantis objektas ar paprastas perėjimo efektas, animacija prisideda prie dinamiškesnės ir patrauklesnės žaidimo patirties.