Pythonova biblioteka Arcade pokriva vas, od najjednostavnijih animacija temeljenih na boji do složenog modeliranja čestica.

Animacija igra ključnu ulogu u poboljšanju vizualne privlačnosti i angažiranosti videoigara. Biblioteka Arcade je Python okvir za stvaranje 2D igara. Nudi jednostavan i učinkovit način za uključivanje animacija u vaše projekte igara.

Možete koristiti biblioteku Arcade za stvaranje osnovnih animacija pokreta i sinkroniziranih animacija s događajima u igri.

Stvorite jednostavnu igru

Prije početka provjerite imate li pip instaliran na vašem uređaju. Upotrijebite ovu naredbu za instaliranje biblioteke arkadnih igara:

pip instaliraj arkadu

Nakon toga izradite Python datoteku pod nazivom jednostavna igra.py i započnite postavljanjem igre u kojoj se igrač može kretati lijevo i desno.

Kôd korišten u ovom članku dostupan je u ovom GitHub spremište i besplatan je za korištenje pod MIT licencom.

Koristeći Arcade knjižnicu, možete stvoriti prozor, postaviti okruženje igre i upravljati unosom igrača. Evo isječka koda za početak:

uvoz arkada

SCREEN_WIDTH = 800
VISINA_EKRANA = 600

razredaMoja Igra(arkada. Prozor):
def__u tome__(sebe):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "moja igra")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2

defizvlačenje(sebe):
arcade.start_render()
col = arkada.boja. PLAVA
arcade.draw_circle_filled (self.player_x, self.player_y, 20, col)

defna_pritisak_tipke(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO:
self.player_x -= 10
elif ključ == arkada.ključ. PRAVO:
self.player_x += 10

defglavni():
igra = Moja igra()
arkada.run()

ako __ime__ == "__glavni__":
glavni()

Dodaj osnovnu animaciju pokreta

Sada podignite svoju igru ​​korak dalje i dodajte osnovnu animaciju kretanja objektu igrača. Za animiranje igrač na pokretu, stvorite 3 različita kruga i iterirajte između njih uzastopno kada se igrač počne kretati. Evo ažuriranog isječka koda za pokret-animacija.py datoteka:

razredaMoja Igra(arkada. Prozor):
def__u tome__(sebe):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "moja igra")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0

defizvlačenje(sebe):
arcade.start_render()
col1 = arkada.boja. PLAVA
col2 = arkada.boja. ZELENO
col3 = arkada.boja. CRVENA

ako self.frame_counter < 10:
arcade.draw_circle_filled (self.player_x, self.player_y, 20,col1 )
elif self.frame_counter < 20:
arcade.draw_circle_filled (self.player_x, self.player_y, 20,col2 )
drugo:
arcade.draw_circle_filled (self.player_x, self.player_y, 20, stupac 3)

defna_pritisak_tipke(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO:
self.player_x -= 10
self.frame_counter = (self.frame_counter + 1) % 30
elif ključ == arkada.ključ. PRAVO:
self.player_x += 10
self.frame_counter = (self.frame_counter + 1) % 30

Evo primjera izlaznog okvira:

Upravljanje brzinom i smjerom animacije

Da biste kontrolirali brzinu animacije, možete uvesti sustav broja sličica u sekundi. Također možete promijeniti redoslijed okvira ovisno o smjeru kretanja igrača. Kad se igrač pomakne slijeva nadesno, okviri će se prikazati obrnutim redoslijedom.

Evo modificiranog isječka koda za broj sličica u sekundi.py datoteka:

razredaMoja Igra(arkada. Prozor):
def__u tome__(sebe):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "moja igra")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0
col1 = arkada.boja. PLAVA
col2 = arkada.boja. ZELENO
col3 = arkada.boja. CRVENA
self.frames = [col1, col2, col3]
self.frame_rate = 10

defizvlačenje(sebe):
arcade.start_render()
frame_index = self.frame_counter // self.frame_rate % len (self.frames)

ako self.player_x < SCREEN_WIDTH // 2:
frame_index = len (self.frames) - 1 - indeks_okvira

indeks = self.frames[frame_index]
arcade.draw_circle_filled (self.player_x, self.player_y, 20, indeks)

defna_pritisak_tipke(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO:
self.player_x -= 10
self.frame_counter += 1
elif ključ == arkada.ključ. PRAVO:
self.player_x += 10
self.frame_counter += 1

Koristite operator modula % s len (samookviri) kako bi se osiguralo da okvir_indeks uvijek ostaje unutar raspona dostupnih okvira. Ovo sprječava IndexError da se ne dogodi kada animacija prolazi kroz okvire.

Podesite okvirna stopa vrijednost za kontrolu brzine animacije i uživanje u animiranom kretanju vaših objekata u igri.

Uključujući dodatne značajke

Knjižnica Arcade nudi razne značajke za poboljšanje vaših animacija.

Učinci čestica

Možete stvoriti efekte čestica, poput eksplozija ili dima, kako biste svojoj igri dodali realizam. Stvorite datoteku pod nazivom čestica.py i dodajte donji kod za jednostavnu implementaciju sustava čestica pomoću Pythona i arkadne biblioteke:

uvoz arkada
uvoz slučajan

# Dimenzije zaslona
SCREEN_WIDTH = 800
VISINA_EKRANA = 600

# Boje
BIJELO = (255, 255, 255)

# Klasa čestica
razredaČestica:
def__u tome__(ja, x, y, dx, dy, polumjer, boja, životni vijek):
sebe.x = x
self.y = y
sebe.dx = dx
samo.dy = dy
sam.radijus = radijus
self.color = boja
self.lifespan = životni vijek

defAžuriraj(sebe):
self.x += self.dx
self.y += self.dy
samo.životni vijek -= 1

defcrtati(sebe):
arcade.draw_circle_filled (self.x, self.y, self.radius, self.color)

# Klasa igre
razredaMoja Igra(arkada. Prozor):
def__u tome__(ja, širina, visina):
super().__init__(širina, visina, "Primjer čestica")
samo.čestice = []

defpostaviti(sebe):
# Stvorite čestice
za _ u raspon (100):
x = random.randrange (SCREEN_WIDTH)
y = random.randrange (SCREEN_HEIGHT)
dx = random.uniform(-1, 1)
dy = random.uniform(-1, 1)
radijus = random.uniform(2, 5)
boja = arkada.boja. BIJELA
životni vijek = random.randint(60, 120)
particle = čestica (x, y, dx, dy, radijus, boja, životni vijek)
self.particles.append (čestica)

defizvlačenje(sebe):
arcade.start_render()
za čestica u samo.čestice:
particle.draw()

defAžuriraj(sam, delta_vrijeme):
za čestica u samo.čestice:
particle.update()

ako čestica.životni vijek <= 0:
samo.čestice.ukloniti (česticu)

defglavni():
igra = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
game.setup()
arkada.run()

ako __ime__ == "__glavni__":
glavni()

Trebali biste vidjeti animaciju koja uključuje mnogo pokretnih čestica:

Interaktivne animacije

Implementirajte interaktivne animacije koje reagiraju na korisnički unos ili događaje u igri. Na primjer, kada igrač komunicira s objektom, on se može animirati, promijeniti boju ili se na neki način transformirati. Ove interaktivne animacije daju povratne informacije i povećavaju angažman igrača u igri. Evo koda za interaktivna-animacija.py datoteka:

uvoz arkada

# Dimenzije zaslona
SCREEN_WIDTH = 800
VISINA_EKRANA = 600

# Boje
BIJELO = (255, 255, 255)
CRVENA = (255, 0, 0)

razredaMoja Igra(arkada. Prozor):
def__u tome__(ja, širina, visina):
super().__init__(širina, visina, "Interaktivna animacija")
self.player_x = 400
self.player_y = 300
self.player_radius = 30
self.player_color = CRVENA
self.animation_radius = 60
self.animation_color = BIJELA
self.animation_active = lažno

defizvlačenje(sebe):
arcade.start_render()

arcade.draw_circle_filled (self.player_x,
self.player_y,
self.player_radius,
self.player_color)

ako self.animation_active:
arcade.draw_circle_filled (self.player_x,
self.player_y,
self.animation_radius,
self.animation_color)

defna_pritisak_miša(ja, x, y, gumb, modifikatori):
ako (self.player_x - self.player_radius <=
x <= self.player_x + self.player_radius i
self.player_y - self.player_radius <=
y <= self.player_y + self.player_radius
):
self.animation_active = Pravi

defAžuriraj(sam, delta_vrijeme):
ako self.animation_active:
samo.radijus_animacije += 1

ako self.animation_radius > 100:
self.animation_active = lažno
self.animation_radius = 0

defglavni():
igra = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arkada.run()

ako __ime__ == "__glavni__":
glavni()

Nadjačati potrebne metode, kao što je izvlačenje, na_pritisak_miša, i Ažuriraj, za rukovanje crtanjem playera i animacije, rukovanje klikovima mišem i ažuriranje animacije.

Za crtanje igrača koristite arkada.nacrtaj_krug_ispunjen funkcija, koja preuzima (x, y) koordinate središta, radijus i boja kao argumenti. Funkcija draw_circle_filled jedna je od Arcadeovi alati koje možete koristiti za crtanje sredstava igre. U ovom slučaju možete nacrtati rastući krug mijenjanjem polumjera tijekom vremena.

The na_pritisak_miša metoda se pokreće kada korisnik klikne mišem. Provjerava jesu li koordinate miša unutar granica objekta igrača i aktivira animaciju ako jesu.

Najbolji primjeri iz prakse za dodavanje animacije

Prilikom dodavanja animacije u svoje igre, razmotrite sljedeće najbolje prakse:

Ograničite broj animacija

Mnogo animacija s mnogo okvira može utjecati na izvedbu. Razmotrite smanjenje broja potrebnih animacija ili okvira, posebno za nekritične elemente u igri. Pojednostavljivanje animacija može pomoći u održavanju dosljedne brzine kadrova i optimizirati korištenje resursa.

Skupno renderiranje sličnih objekata

Grupirajte slične objekte koji dijele iste okvire animacije i teksture i renderirajte ih kao skupinu. Grupiranje smanjuje broj poziva za izvlačenje, što rezultira poboljšanom izvedbom. Ova je tehnika osobito korisna pri animiranju objekata koji koriste isti list spriteova ili imaju slične sekvence animacije.

Koristite interpolaciju za glatku animaciju

Primijenite tehnike interpolacije, kao što je linearna interpolacija (lerping), kako biste postigli glatke prijelaze animacije. Interpolacija izračunava međuvrijednosti između ključnih kadrova animacije za stvaranje fluidnih pokreta. Ovaj pristup sprječava iznenadne skokove ili trzaje između okvira, što rezultira vizualno privlačnijim animacijama.

Uzmite u obzir brzinu i vrijeme animacije

Eksperimentirajte s različitim brzinama i vremenom animacije kako biste pronašli pravu ravnotežu za svoju igru. Prilagodite trajanje kadra ili upotrijebite različite sekvence animacije za stvaranje varijacija u brzini, ubrzanju ili usporavanju. Ove prilagodbe mogu dodati dubinu i karakter animacijama vaše igre.

Testirajte i optimizirajte

Redovito testirajte svoje animacije na različitim uređajima i pratite izvedbu. Potražite potencijalna uska grla ili usporavanja i optimizirajte ih u skladu s tim. Ovaj proces pomaže osigurati glatko i dosljedno iskustvo animacije na širokom rasponu uređaja.

Učinite igre privlačnijim uz animaciju

Dodavanje animacija u vaše igre može značajno povećati angažman i uživljavanje igrača. Animacije pružaju vizualnu povratnu informaciju radnjama igrača, čineći igru ​​intuitivnijom i ugodnijom. Oni oživljavaju svjetove igara, stvarajući osjećaj realizma i uzbuđenja.

Bilo da se radi o liku koji trči, objektu koji eksplodira ili jednostavnom efektu prijelaza, animacije doprinose dinamičnijem i zadivljujućem iskustvu igranja.