Pythonova knjižnica Arcade vas pokriva, od najpreprostejših barvnih animacij do kompleksnega modeliranja delcev.

Animacija ima ključno vlogo pri povečanju vizualne privlačnosti in angažiranosti video iger. Knjižnica Arcade je ogrodje Python za ustvarjanje 2D iger. Ponuja preprost in učinkovit način za vključitev animacij v vaše projekte iger.

S knjižnico Arcade lahko ustvarite osnovne animacije gibanja in sinhronizirane animacije z dogodki v igri.

Ustvari preprosto igro

Preden začnete, se prepričajte, da imate pip nameščen v vaši napravi. Za namestitev arkadne knjižnice uporabite ta ukaz:

pip install arkada

Po tem ustvarite datoteko Python z imenom simple-game.py in začnite z nastavitvijo igre, kjer se lahko igralec premika levo in desno.

Koda, uporabljena v tem članku, je na voljo tukaj Repozitorij GitHub in je brezplačen za uporabo pod licenco MIT.

Z uporabo knjižnice Arcade lahko ustvarite okno, nastavite okolje igre in upravljate z vnosom igralca. Tukaj je delček kode za začetek:

uvoz arkada
instagram viewer

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

razredMyGame(arkadne. okno):
def__v__(sebe):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Moja igra")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2

defon_draw(sebe):
arcade.start_render()
col = arcade.color. MODRA
arcade.draw_circle_filled (self.player_x, self.player_y, 20, col)

defna_pritisk_tipke(jaz, ključ, modifikatorji):
če ključ == arcade.key. LEVO:
self.player_x -= 10
elif ključ == arcade.key. PRAV:
self.player_x += 10

defglavni():
igra = MojaIgra()
arcade.run()

če __ime__ == "__glavni__":
glavni ()

Dodajte osnovno animacijo gibanja

Zdaj naredite svojo igro še korak dlje in objektu igralca dodajte osnovno animacijo gibanja. Za animiranje igralec pri gibanju, ustvarite 3 različne kroge in zaporedno ponavljajte med njimi, ko se igralec začne premikati. Tukaj je posodobljen delček kode za gibalna-animacija.py mapa:

razredMyGame(arkadne. okno):
def__v__(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

defon_draw(sebe):
arcade.start_render()
col1 = arcade.color. MODRA
col2 = arcade.color. ZELENA
col3 = arcade.color. RDEČA

če 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 )
drugače:
arcade.draw_circle_filled (self.player_x, self.player_y, 20, col3)

defna_pritisk_tipke(jaz, ključ, modifikatorji):
če ključ == arcade.key. LEVO:
self.player_x -= 10
self.frame_counter = (self.frame_counter + 1) % 30
elif ključ == arcade.key. PRAV:
self.player_x += 10
self.frame_counter = (self.frame_counter + 1) % 30

Tukaj je primer izhodnega okvira:

Nadzor hitrosti in smeri animacije

Za nadzor hitrosti animacije lahko uvedete sistem hitrosti sličic. Vrstni red okvirjev lahko spremenite tudi glede na smer gibanja igralca. Ko se igralec premika od leve proti desni, se okvirji prikažejo v obratnem vrstnem redu.

Tukaj je spremenjen delček kode za frame-rate.py mapa:

razredMyGame(arkadne. okno):
def__v__(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 = arcade.color. MODRA
col2 = arcade.color. ZELENA
col3 = arcade.color. RDEČA
self.frames = [col1, col2, col3]
self.frame_rate = 10

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

če self.player_x < SCREEN_WIDTH // 2:
frame_index = len (self.frames) - 1 - okvir_indeks

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

defna_pritisk_tipke(jaz, ključ, modifikatorji):
če ključ == arcade.key. LEVO:
self.player_x -= 10
self.frame_counter += 1
elif ključ == arcade.key. PRAV:
self.player_x += 10
self.frame_counter += 1

Uporabite operator modula % z len (samookvirji) zagotoviti, da okvir_indeks vedno ostane znotraj obsega razpoložljivih okvirjev. To preprečuje, IndexError da se ne pojavi, ko se animacija vrti skozi okvirje.

Prilagodite hitrost_sličic vrednost za nadzor hitrosti animacije in uživajte v animiranem gibanju svojih predmetov v igri.

Vključno z dodatnimi funkcijami

Knjižnica Arcade ponuja različne funkcije za izboljšanje vaših animacij.

Učinki delcev

Ustvarite lahko učinke delcev, kot so eksplozije ali dim, da svoji igri dodate pristnost. Ustvarite datoteko z imenom particle.py in dodajte spodnjo kodo za preprosto implementacijo sistema delcev z uporabo Pythona in arkadne knjižnice:

uvoz arkada
uvoz naključen

# Mere zaslona
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Barve
BELA = (255, 255, 255)

# Razred delcev
razreddelec:
def__v__(jaz, x, y, dx, dy, polmer, barva, življenjska doba):
sam.x = x
self.y = y
self.dx = dx
self.dy = dy
self.radius = polmer
self.color = barva
self.lifespan = življenjska doba

defnadgradnja(sebe):
self.x += self.dx
self.y += self.dy
samo.življenjska doba -= 1

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

# Igralni razred
razredMyGame(arkadne. okno):
def__v__(jaz, širina, višina):
super().__init__(širina, višina, "Primer delcev")
self.particles = []

defnastaviti(sebe):
# Ustvarite delce
za _ v obseg (100):
x = random.randrange (SCREEN_WIDTH)
y = random.randrange (SCREEN_HEIGHT)
dx = random.uniform(-1, 1)
dy = naključno.uniform(-1, 1)
radius = random.uniform(2, 5)
barva = arkada.barva. BELA
življenjska doba = random.randint(60, 120)
delec = delec (x, y, dx, dy, polmer, barva, življenjska doba)
self.particles.append (delec)

defon_draw(sebe):
arcade.start_render()
za delec v self.delci:
particle.draw()

defnadgradnja(sam, delta_time):
za delec v self.delci:
particle.update()

če particle.lifespan <= 0:
self.particles.remove (delec)

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

če __ime__ == "__glavni__":
glavni ()

Morali bi videti animacijo, ki vključuje veliko premikajočih se delcev:

Interaktivne animacije

Implementirajte interaktivne animacije, ki se odzivajo na uporabniški vnos ali dogodke v igri. Na primer, ko igralec komunicira s predmetom, lahko ta animira, spremeni barvo ali se na nek način preoblikuje. Te interaktivne animacije zagotavljajo povratne informacije in povečujejo igralčevo sodelovanje z igro. Tukaj je koda za interaktivna-animacija.py mapa:

uvoz arkada

# Mere zaslona
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Barve
BELA = (255, 255, 255)
RDEČA = (255, 0, 0)

razredMyGame(arkadne. okno):
def__v__(jaz, širina, višina):
super().__init__(širina, višina, "Interaktivna animacija")
self.player_x = 400
self.player_y = 300
self.player_radius = 30
self.player_color = RDEČA
self.animation_radius = 60
self.animation_color = BELA
self.animation_active = False

defon_draw(sebe):
arcade.start_render()

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

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

defon_mouse_press(sam, x, y, gumb, modifikatorji):
če (self.player_x - self.player_radius <=
x <= self.player_x + self.player_radius in
self.player_y - self.player_radius <=
y <= self.player_y + self.player_radius
):
self.animation_active = Prav

defnadgradnja(sam, delta_time):
če self.animation_active:
self.animation_radius += 1

če self.animation_radius > 100:
self.animation_active = False
self.animation_radius = 0

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

če __ime__ == "__glavni__":
glavni ()

Preglasite potrebne metode, kot je npr on_draw, on_mouse_press, in nadgradnja, za obdelavo risanja predvajalnika in animacije, obdelavo klikov miške in posodabljanje animacije.

Za risanje igralca uporabite arcade.draw_circle_filled funkcijo, ki prevzame (x, y) koordinate središča, polmer in barva kot argumenti. Funkcija draw_circle_filled je ena od Orodja Arcade, ki jih lahko uporabite za risanje sredstev igre. V tem primeru lahko narišete naraščajoči krog s spreminjanjem polmera skozi čas.

The on_mouse_press metoda se zažene, ko uporabnik klikne miško. Preveri, ali so koordinate miške v mejah predmeta igralca, in aktivira animacijo, če so.

Najboljše prakse za dodajanje animacije

Ko v svoje igre dodajate animacijo, upoštevajte naslednje najboljše prakse:

Omejite število animacij

Veliko animacij s številnimi okvirji lahko vpliva na zmogljivost. Razmislite o zmanjšanju števila potrebnih animacij ali okvirjev, zlasti za nepomembne elemente v igri. Poenostavitev animacij lahko pomaga ohraniti dosledno hitrost sličic in optimizirati uporabo virov.

Paketno upodabljanje podobnih predmetov

Združite podobne predmete, ki si delijo iste animacijske okvirje in teksture, in jih upodabljajte kot skupino. Paketno združevanje zmanjša število klicev risanja, kar ima za posledico izboljšano zmogljivost. Ta tehnika je še posebej uporabna pri animiranju predmetov, ki uporabljajo isti list sprite ali imajo podobna zaporedja animacij.

Uporabite interpolacijo za gladko animacijo

Uporabite tehnike interpolacije, kot je linearna interpolacija (lerping), da dosežete gladke prehode animacije. Interpolacija izračuna vmesne vrednosti med ključnimi sličicami animacije za ustvarjanje tekočih gibov. Ta pristop preprečuje nenadne skoke ali sunkovite gibe med sličicami, zaradi česar so animacije vizualno privlačnejše.

Upoštevajte hitrost in čas animacije

Eksperimentirajte z različnimi hitrostmi in časom animacije, da najdete pravo ravnovesje za svojo igro. Prilagodite trajanje okvirja ali uporabite različna zaporedja animacij, da ustvarite variacije v hitrosti, pospešku ali pojemku. Te prilagoditve lahko dodajo globino in značaj animacijam vaše igre.

Testiraj in optimiziraj

Redno testirajte svoje animacije na različnih napravah in spremljajte delovanje. Poiščite morebitna ozka grla ali upočasnitve in jih ustrezno optimizirajte. Ta postopek pomaga zagotoviti nemoteno in dosledno izkušnjo animacije v številnih napravah.

Naj bodo igre privlačnejše z animacijo

Dodajanje animacij v vaše igre lahko občutno poveča angažiranost in poglobitev igralcev. Animacije zagotavljajo vizualne povratne informacije igralčevim dejanjem, zaradi česar je igranje bolj intuitivno in prijetno. Oživijo svetove iger ter ustvarijo občutek realizma in vznemirjenja.

Ne glede na to, ali gre za lik, ki teče, objekt, ki eksplodira, ali preprost učinek prehoda, animacije prispevajo k bolj dinamični in očarljivi igralni izkušnji.