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ą:

instagram viewer
importuoti arkada

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

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

defon_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 += 10

defpagrindinis():
ž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 = 0

defon_draw(savarankiškai):
arcade.start_render()
col1 = arcade.color. MĖLYNA
col2 = arkada.spalva. ŽALIAS
col3 = arcade.color. RAUDONA

jeigu 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 = 10

defon_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_indeksas

indeksas = 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ė -= 1

defpieš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 = Netiesa

defon_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 = Tiesa

defatnaujinti(savaime, delta_laikas):
jeigu self.animation_active:
self.animation_radius += 1

jeigu self.animation_radius > 100:
self.animation_active = Netiesa
self.animation_radius = 0

defpagrindinis():
ž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.