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:
import árkád
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600osztá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 // 2defon_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 += 10deffő-():
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 = 0defon_draw(maga):
arcade.start_render()
col1 = arcade.color. KÉK
col2 = arcade.color. ZÖLD
col3 = arcade.color. PIROSha 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 = 10defon_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_indexindex = 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 = élettartamdeffrissítés(maga):
self.x += self.dx
self.y += self.dy
én.élettartam -= 1defhú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 = Hamisdefon_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 = Igazdeffrissítés(self, delta_time):
ha self.animation_active:
self.animation_radius += 1ha self.animation_radius > 100:
self.animation_active = Hamis
self.animation_radius = 0deffő-():
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á.