A Python Arcade könyvtára a legegyszerűbb színalapú animációktól a komplex részecskemodellezésig nyújt mindent.

Az animáció létfontosságú szerepet játszik a videojátékok vizuális vonzerejének és elköteleződésének fokozásában. Az Arcade könyvtár egy Python keretrendszer 2D játékok létrehozására. Egyszerű és hatékony módot kínál az animációk beépítésére a játékprojektekbe.

Az Arcade könyvtár segítségével alapvető mozgásanimációkat és játékeseményekkel szinkronizált animációkat hozhat létre.

Hozzon létre egy egyszerű játékot

Mielőtt elkezdené, győződjön meg arról, hogy rendelkezik pip telepítve van a készülékére. Ezzel a paranccsal telepítheti az arcade könyvtárat:

pip install arcade

Ezután hozzon létre egy Python nevű fájlt simple-game.py és kezdje egy játék felállításával, ahol a játékos balra és jobbra mozoghat.

A cikkben használt kód itt érhető el GitHub adattár és az MIT licence alapján ingyenesen használható.

Az Arcade könyvtár használatával ablakot hozhat létre, beállíthatja a játék környezetét, és kezelheti a játékosok bevitelét. Íme egy kódrészlet a kezdéshez:

instagram viewer
import árkád

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

osztályAz én játékom(árkád. Ablak):
def__benne__(maga):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Az én játékom")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2

defon_draw(maga):
arcade.start_render()
col = arcade.color. KÉK
arcade.draw_circle_filled (self.player_x, self.player_y, 20, col)

defon_key_press(én, kulcs, módosítók):
ha kulcs == arcade.key. BAL:
self.player_x -= 10
elif kulcs == arcade.key. JOBB:
self.player_x += 10

deffő-():
játék = SajátJáték()
arcade.run()

ha __név__ == "__fő__":
fő()

Adjon hozzá Basic Movement Animációt

Most lépjen egy lépéssel tovább a játékban, és adjon hozzá alapvető mozgási animációt a játékos objektumhoz. Animálni a játékos mozgásban, hozzon létre 3 különböző kört, és ismételje meg őket egymás után, amikor a játékos mozogni kezd. Íme a frissített kódrészlet a mozgás-animáció.py fájl:

osztályAz én játékom(árkád. Ablak):
def__benne__(maga):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Az én játékom")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0

defon_draw(maga):
arcade.start_render()
col1 = arcade.color. KÉK
col2 = arcade.color. ZÖLD
col3 = arcade.color. PIROS

ha 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,2. oszlop )
más:
arcade.draw_circle_filled (self.player_x, self.player_y, 20, col3)

defon_key_press(én, kulcs, módosítók):
ha kulcs == arcade.key. BAL:
self.player_x -= 10
self.frame_counter = (self.frame_counter + 1) % 30
elif kulcs == arcade.key. JOBB:
self.player_x += 10
self.frame_counter = (self.frame_counter + 1) % 30

Íme egy példa a kimeneti keretre:

Az animáció sebességének és irányának vezérlése

Az animáció sebességének szabályozásához bevezethet egy képkockasebesség-rendszert. A kockák sorrendjét a játékos mozgási irányától függően is módosíthatja. Amikor a játékos balról jobbra mozog, a keretek fordított sorrendben jelennek meg.

Íme a módosított kódrészlet a frame-rate.py fájl:

osztályAz én játékom(árkád. Ablak):
def__benne__(maga):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Az én játékom")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0
col1 = arcade.color. KÉK
col2 = arcade.color. ZÖLD
col3 = arcade.color. PIROS
self.frames = [col1, col2, col3]
self.frame_rate = 10

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

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

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

defon_key_press(én, kulcs, módosítók):
ha kulcs == arcade.key. BAL:
self.player_x -= 10
self.frame_counter += 1
elif kulcs == arcade.key. JOBB:
self.player_x += 10
self.frame_counter += 1

Használja a modulus operátort % val vel len (self.frames) annak biztosítására, hogy a frame_index mindig a rendelkezésre álló keretek tartományán belül marad. Ez megakadályozza a IndexError attól, hogy az animáció áthaladjon a képkockákon.

Állítsa be a filmkocka szám értékkel szabályozhatja az animáció sebességét, és élvezheti a játékobjektumok animált mozgását.

Kiegészítő funkciókkal együtt

Az Arcade könyvtár különféle funkciókat kínál az animációk javításához.

Részecskehatások

Létrehozhat részecskeeffektusokat, például robbanásokat vagy füstöt, hogy valósághűbbé tegye a játékot. Hozzon létre egy nevű fájlt részecske.py és adja hozzá az alábbi kódot egy egyszerű részecskerendszer megvalósításához a Python és az arcade könyvtár használatával:

import árkád
import véletlen

# Képernyő méretei
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Színek
FEHÉR = (255, 255, 255)

# Részecskeosztály
osztályRészecske:
def__benne__(saját, x, y, dx, dy, sugár, szín, élettartam):
önmaga.x = x
self.y = y
self.dx = dx
self.dy = dy
én.sugár = sugár
én.szín = szín
én.élettartam = élettartam

deffrissítés(maga):
self.x += self.dx
self.y += self.dy
én.élettartam -= 1

defhúz(maga):
arcade.draw_circle_filled (self.x, self.y, self.radius, self.color)

# Játék osztály
osztályAz én játékom(árkád. Ablak):
def__benne__(önmagasság, szélesség, magasság):
super().__init__(szélesség, magasság, "Részecske példa")
self.partticles = []

defbeállít(maga):
# Hozzon létre részecskéket
számára _ ban ben hatótávolság(100):
x = random.randrange (SCREEN_WIDTH)
y = random.randrange (SCREEN_HEIGHT)
dx = random.uniform(-1, 1)
dy = random.uniform(-1, 1)
sugár = random.uniform(2, 5)
szín = arcade.color. FEHÉR
élettartam = random.randint(60, 120)
részecske = Részecske (x, y, dx, dy, sugár, szín, élettartam)
self.partticles.append (részecske)

defon_draw(maga):
arcade.start_render()
számára részecske ban ben önrészecskék:
particle.draw()

deffrissítés(self, delta_time):
számára részecske ban ben önrészecskék:
particle.update()

ha részecske.élettartam <= 0:
self.partticles.remove (részecske)

deffő-():
játék = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
game.setup()
arcade.run()

ha __név__ == "__fő__":
fő()

Látnia kell egy animációt, amely sok mozgó részecskét tartalmaz:

Interaktív animációk

Olyan interaktív animációkat valósítson meg, amelyek reagálnak a felhasználói bevitelre vagy a játékeseményekre. Például amikor a játékos kölcsönhatásba lép egy tárggyal, az animálhat, megváltoztathatja a színét vagy valamilyen módon átalakulhat. Ezek az interaktív animációk visszajelzést adnak, és fokozzák a játékos elköteleződését a játékban. Itt van a kód a interactive-animation.py fájl:

import árkád

# Képernyő méretei
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Színek
FEHÉR = (255, 255, 255)
PIROS = (255, 0, 0)

osztályAz én játékom(árkád. Ablak):
def__benne__(önmagasság, szélesség, magasság):
super().__init__(szélesség, magasság, "Interaktív animáció")
self.player_x = 400
self.player_y = 300
self.player_radius = 30
self.player_color = PIROS
self.animation_radius = 60
self.animation_color = FEHÉR
self.animation_active = Hamis

defon_draw(maga):
arcade.start_render()

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

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

defon_mouse_press(self, x, y, gomb, módosítók):
ha (self.player_x - self.player_radius <=
x <= self.player_x + self.player_radius és
self.player_y - self.player_radius <=
y <= self.player_y + self.player_radius
):
self.animation_active = Igaz

deffrissítés(self, delta_time):
ha self.animation_active:
self.animation_radius += 1

ha self.animation_radius > 100:
self.animation_active = Hamis
self.animation_radius = 0

deffő-():
játék = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

ha __név__ == "__fő__":
fő()

A szükséges módszerek felülírása, mint pl on_draw, on_mouse_press, és frissítés, a lejátszó és az animáció rajzolásának, az egérkattintások kezelésének és az animáció frissítésének kezeléséhez.

A játékos rajzolásához használja a arcade.draw_circle_filled függvényt, amely a (x, y) a középpont, a sugár és a szín koordinátái argumentumként. A draw_circle_filled függvény az egyik Az Arcade eszközei, amelyekkel játékeszközöket rajzolhatsz. Ebben az esetben a sugár időbeli változtatásával növekvő kört rajzolhat.

A on_mouse_press módszer akkor fut le, amikor a felhasználó rákattint az egérrel. Ellenőrzi, hogy az egér koordinátái a játékos objektum határain belül vannak-e, és aktiválja az animációt, ha igen.

Az animáció hozzáadásának bevált gyakorlatai

Amikor animációt ad hozzá játékaihoz, vegye figyelembe a következő bevált módszereket:

Korlátozza az animációk számát

A sok képkockás animáció befolyásolhatja a teljesítményt. Fontolja meg a szükséges animációk vagy képkockák számának minimalizálását, különösen a játék nem kritikus elemei esetében. Az animációk leegyszerűsítése segít fenntartani a konzisztens képkockasebességet és optimalizálni az erőforrás-felhasználást.

Hasonló objektumok kötegelt renderelése

Csoportosítsa a hasonló objektumokat, amelyek ugyanazokat az animációs kereteket és textúrákat osztják meg, és kötegként jelenítse meg őket. A kötegelés csökkenti a sorsolási hívások számát, ami jobb teljesítményt eredményez. Ez a technika különösen hasznos olyan objektumok animálásakor, amelyek ugyanazt a sprite lapot használnak, vagy hasonló animációs sorozatokkal rendelkeznek.

Használja az interpolációt a sima animációhoz

Alkalmazzon interpolációs technikákat, például lineáris interpolációt (lerping), hogy sima animációs átmeneteket érjen el. Az interpoláció közbenső értékeket számít ki az animációs kulcskockák között, hogy folyékony mozgásokat hozzon létre. Ez a megközelítés megakadályozza a hirtelen ugrásokat vagy rángatózó mozdulatokat a képkockák között, ami látványosabb animációkat eredményez.

Vegye figyelembe az animáció sebességét és időzítését

Kísérletezzen különböző animációs sebességekkel és időzítésekkel, hogy megtalálja a játékához megfelelő egyensúlyt. Állítsa be a képkocka időtartamát, vagy használjon különböző animációs sorozatokat a sebesség, a gyorsulás vagy a lassítás variációihoz. Ezek a beállítások mélységet és karaktert adhatnak a játék animációihoz.

Tesztelje és optimalizálja

Rendszeresen tesztelje animációit különböző eszközökön, és kövesse nyomon a teljesítményt. Keresse meg a lehetséges szűk keresztmetszeteket vagy lassulásokat, és ennek megfelelően optimalizáljon. Ez a folyamat elősegíti a zökkenőmentes és következetes animációs élményt az eszközök széles körében.

Tedd vonzóbbá a játékokat animációval

Ha animációkat ad hozzá játékaihoz, jelentősen fokozhatja a játékosok elköteleződését és elmerülését. Az animációk vizuális visszajelzést adnak a játékos műveleteiről, intuitívabbá és élvezetesebbé téve a játékmenetet. Életre keltik a játékvilágokat, valósághűséget és izgalmat keltve.

Legyen szó egy futó karakterről, egy tárgy felrobbanásáról vagy egy egyszerű átmeneti effektusról, az animációk dinamikusabb és magával ragadóbb játékélményhez járulnak hozzá.