Élénkítheti a legegyszerűbb játékokat animált részecskékkel. Ezekkel a technikákkal szimuláljon mozgást, robbanásokat és egyebeket.
A Pygame egy népszerű könyvtár a Python használatával történő játékok fejlesztéséhez. A játékok készítése közben speciális effektusok hozzáadása nagymértékben javíthatja a játékosok vizuális vonzerejét és általános élményét.
A részecskerendszerek hatékony technikák dinamikus és vizuálisan érdekes hatások, például porfelhők, robbanások, köd és egyebek létrehozására.
Hozzon létre egy egyszerű játékot
Mielőtt belemerülne a részecskerendszerekbe és a vizuális fejlesztésekbe, kezdje el egy egyszerű játék létrehozásával a Pygame segítségével. Hozzon létre egy új nevű fájlt simple-game.py és kezdje a szükséges könyvtárak importálásával és a Pygame inicializálásával. Állítsa be a játékablakot meghatározott szélességgel és magassággal.
A cikkben használt kód itt érhető el GitHub adattár és az MIT licence alapján ingyenesen használható.
A fő játékhurokon belül kezelheti a felhasználói eseményeket, és frissítheti a játékos pozícióját a billentyűleütések alapján.
Rajzolj egy téglalapot a játékos objektumhoz pygame.draw.rect().Végül frissítse a játék ablakát a segítségével pygame.display.flip() és kilép a játékból, amikor a játékos kilép a hurokból. Ez az egyszerű játék lesz az alapja a speciális effektusok részecskerendszerekkel történő hozzáadásának.
Látnia kell egy fehér négyzetet, amely azt a játékost ábrázolja, akit balra és jobbra mozgathat:
Különféle részecsketípusok létrehozása
Most, hogy beállította az egyszerű játékot, különböző részecskerendszereket adhat hozzá. Hozzon létre részecskeosztályokat minden effektushoz és részecskerendszer osztályt a részecskék kezeléséhez és frissítéséhez.
Részecskehatás, amikor a játékos mozog
Az első részecskehatás a játékos hátából kibocsátott porszemcsék nyoma lesz, amikor a játékos elkezd mozgatni egér vagy billentyűzet segítségével. Ezenkívül a porrészecskék iránya megváltozik, amikor a lejátszó irányt változtat.
Határozza meg a Részecske osztály, amely egy egyedi részecskét képvisel. Minden részecskének van egy kezdeti pozíciója (x és y), véletlenszerű sebesség (dx és dy), és egy élettartam, amely meghatározza, hogy mennyi ideig fog létezni a részecske.
Ezenkívül határozza meg a ParticleSystem osztály, amely részecskék gyűjteményét kezeli. Új részecskét adhat hozzá a rendszerhez a add_partticle() módszer. A frissítés() módszer frissíti a rendszerben lévő összes részecskét, és eltávolítja az élettartamuk végét elért részecskéket.
# Részecskeosztály
osztályRészecske:
def__benne__(én, x, y):
önmaga.x = x
self.y = y
self.dx = random.uniform(-1, 1)
self.dy = random.uniform(-1, 1)
én.élettartam = 60deffrissítés(maga):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1defhúz(én, ablak):
szín = (200, 200, 200)
pozíció = (int (self.x), int (self.y))
pygame.draw.circle (ablak, szín, pozíció, 2)# Részecskerendszer osztály
osztályParticleSystem:
def__benne__(maga):
self.partticles = []defadd_partticle(én, x, y):
self.partticles.append (Particle (x, y))deffrissítés(maga):
számára részecske ban ben önrészecskék:
particle.update()ha részecske.élettartam <= 0:
self.partticles.remove (részecske)
defhúz(én, ablak):
számára részecske ban ben önrészecskék:
particle.draw (ablak)
A részecskerendszer játékba való integrálásához néhány módosítást kell végrehajtania a fő játékhurokon. Hozzon létre egy új nevű fájlt mozgás-részecskék.py és adja hozzá a kódot az alábbi frissítésekkel:
# Hozzon létre részecskerendszert
particle_system = Részecskerendszer()# Fő játékhurok
futás = Igaz
óra = pygame.time. Óra()míg futás:
dt = óra.tick(60) / 1000.0számára esemény ban ben pygame.event.get():
ha event.type == pygame. KILÉPÉS:
futás = Hamisparticle_y = player_y + player_height // 2
részecske_x = player_x + player_widthkeys = pygame.key.get_pressed()
határ = player_x < window_width - player_widthha kulcsok[pygame. K_LEFT] és játékos_x > 0:
játékos_x -= 5
particle_system.add_partticle (részecske_x, részecske_y)ha kulcsok[pygame. K_JOBBRA] és határ:
player_x += 5
particle_system.add_partticle (player_x, particle_y)particle_system.update()
window.fill (FEKETE)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (ablak, FEHÉR, player_pos)
particle_system.draw (ablak)pygame.display.flip()
# Lépjen ki a játékból
pygame.quit()
Amikor most mozgatja a játékos objektumot, a mozgást hangsúlyozó részecskéket kell látnia:
Blast Effect
A következő részecskeeffektus egy robbanásszerű hatás lesz, amely akkor következik be, amikor a játékos golyót lő. A robbanáshatás a golyó helyzetéből kibocsátott vörös színű részecskékből áll.
Határozza meg a Részecske osztály hasonló az előzőhöz, de ezúttal tartalmazza a szín paraméter, amely a részecske színét jelzi.
Továbbá frissítse a ParticleSystem osztály az új részecsketípus kezelésére. A add_partticle() módszer most további szín paramétert, és a megadott színű részecskéket hoz létre.
# Részecskeosztály
osztályRészecske:
def__benne__(saját, x, y, szín):
önmaga.x = x
self.y = y
self.dx = random.uniform(-2, 2)
self.dy = random.uniform(-2, 2)
én.élettartam = 30
én.szín = színdeffrissítés(maga):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1defhúz(én, ablak):
pozíció = (int (self.x), int (self.y))
pygame.draw.circle (ablak, self.color, position, 3)# Részecskerendszer osztály
osztályParticleSystem:
def__benne__(maga):
self.partticles = []defadd_partticle(saját, x, y, szín):
self.partticles.append (Részecske (x, y, szín)deffrissítés(maga):
számára részecske ban ben önrészecskék:
particle.update()ha részecske.élettartam <= 0:
self.partticles.remove (részecske)
defhúz(én, ablak):
számára részecske ban ben önrészecskék:
particle.draw (ablak)
Ahhoz, hogy a blast effektet beépítsd a játékba, néhány módosítást kell végrehajtanod a fő játékhurokon. Hozzon létre egy új fájlnevet lő-részecske.py és adja hozzá a kódot az alábbi frissítésekkel:
# Hozzon létre részecskerendszert
particle_system = Részecskerendszer()# Fő játékhurok
futás = Igaz
óra = pygame.time. Óra()míg futás:
dt = óra.tick(60) / 1000.0számára esemény ban ben pygame.event.get():
ha event.type == pygame. KILÉPÉS:
futás = Hamiskeys = pygame.key.get_pressed()
határ = player_x < window_width - player_widthha kulcsok[pygame. K_LEFT] és játékos_x > 0:
játékos_x -= 5ha kulcsok[pygame. K_JOBBRA] és határ:
player_x += 5ha kulcsok[pygame. K_SPACE]:
bullet_x = player_x + player_width // 2
bullet_y = játékos_y
particle_system.add_partticle (bullet_x, bullet_y, RED)particle_system.update()
window.fill (FEKETE)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (ablak, FEHÉR, player_pos)
particle_system.draw (ablak)pygame.display.flip()
# Lépjen ki a játékból
pygame.quit()
Íme a kimenet:
Amikor a szóköz ( pygame. K_SPACE) lenyomva adjon hozzá egy részecskét a részecskerendszerhez a golyó helyén. Ez létrehozza a robbanás hatását vörös részecskékkel.
Por hatás
Az utolsó vizuális fejlesztés, amelyet megvalósíthat, egy poros háttérhatás. A porhatás kis szürke részecskékből áll, amelyek körkörösen mozognak, dinamikus és poros hátteret hozva létre.
Frissítse a Részecske osztályba foglalni egy szög és sebesség minden egyes részecskére. A szög határozza meg a mozgás irányát, a sebesség pedig azt, hogy milyen gyorsan mozognak a részecskék kör alakú mintájukban. Módosítsa a frissítés() módszer az egyes részecskék helyzetének frissítésére szögük és sebességük alapján.
Továbbá frissítse a ParticleSystem osztály az új részecskeviselkedés kezeléséhez. A részecskék most körkörösen mozognak a játékablakon belül.
# Részecskeosztály
osztályRészecske:
def__benne__(ön, x, y, sugár):
önmaga.x = x
self.y = y
én.sugár = sugár
self.angle = random.uniform(0, 2 * math.pi)
self.speed = random.uniform(0.5, 1.5)deffrissítés(maga):
saját.szög += 0.02
self.x += math.cos (self.angle) * self.speed
self.y += math.sin (self.angle) * self.sebességha saját.x < 0:
self.x = ablak_szélessége
elif self.x > window_width:
saját.x = 0ha én.y < 0:
self.y = ablak_magassága
elif self.y > window_height:
self.y = 0defhúz(én, ablak):
szín = (128, 128, 128)
pos = (int (self.x), int (self.y))
sugár = int (self.radius)
pygame.draw.circle (ablak, szín, pozíció, sugár)# Részecskerendszer osztály
osztályParticleSystem:
def__benne__(maga):
self.partticles = []defadd_partticle(ön, x, y, sugár):
self.partticles.append (részecske (x, y, sugár))deffrissítés(maga):
számára részecske ban ben önrészecskék:
particle.update()
defhúz(én, ablak):
számára részecske ban ben önrészecskék:
particle.draw (ablak)
A poreffektus játékba való integrálásához néhány módosítást kell végrehajtania a fő játékhurokon. Hozzon létre egy új nevű fájlt por-részecske.py és adja hozzá a kódot az alábbi frissítésekkel:
# Hozzon létre részecskerendszert a porhatás érdekében
particle_system = Részecskerendszer()# Fő játékhurok
futás = Igaz
óra = pygame.time. Óra()míg futás:
dt = óra.tick(60) / 1000.0számára esemény ban ben pygame.event.get():
ha event.type == pygame. KILÉPÉS:
futás = Hamisparticle_x = random.randint(0, window_width)
particle_y = random.randint(0, window_height)particle_system.add_partticle (részecske_x, részecske_y, 1)
particle_system.update()
window.fill((0, 0, 0))
particle_system.draw (ablak)pygame.display.flip()
# Lépjen ki a játékból
pygame.quit()
Adjon hozzá részecskéket véletlenszerűen a játékablakhoz a gombbal random.randint() funkció. Minden részecske kezdeti sugara 1. Frissítse és rajzolja meg a részecskerendszert a játékablakban, dinamikus és poros háttérhatást létrehozva.
Sok részecskét kell látnia a képernyőn, amelyek véletlenszerűen, de simán mozognak:
Speciális effektusok bevált gyakorlatai
Amikor speciális effektusokat ad hozzá Pygame játékához, vegye figyelembe a következő bevált módszereket:
Teljesítmény optimalizálás
A részecskerendszerek nagyszámú részecskét tartalmazhatnak, ami befolyásolhatja a játék teljesítményét. Olyan technikákat valósítson meg, mint a térbeli particionálás (pl. Quadtree), hogy optimalizálja a részecskék frissítését és a rajzolást.
Részecske-újrahasznosítás
Ahelyett, hogy minden képkockában részecskéket hozna létre és semmisítene meg, fontolja meg a részecskék újrafelhasználását a tulajdonságaik visszaállításával, amikor elérik élettartamuk végét. Ez segít minimalizálni a memóriafoglalást és az elosztást.
Részecske Pooling
Tartson fenn egy előre lefoglalt részecskék készletét, hogy elkerülje az új példányok létrehozásával járó többletköltséget futás közben. Ez javíthatja a teljesítményt és csökkentheti a memória töredezettségét.
Részecskeszám határértéke
Annak elkerülése érdekében, hogy a részecskerendszerek túlterheljék a játék képernyőjét, állítson be korlátokat a részecskék maximális számára, és távolítsa el a részecskéket, amikor elérik ezt a határt. Ez biztosítja, hogy az effektusok vizuálisan vonzóak maradjanak anélkül, hogy akadályoznák a játékmenetet.
Vizuális konzisztencia
Tartson fenn egységes vizuális stílust a játék során, beleértve a részecskeeffektusokat is. Győződjön meg arról, hogy a részecskék színei, méretei és mozgási mintái koherensek az általános témával és művészeti stílussal.
Hang hatások
Hangeffektusok hozzáadása hogy kiegészítse részecskehatásait. Például játsszon le robbanáshangokat, ha robbanáshatás lép fel, vagy környezeti hangokat, ha köd- vagy poreffektusok aktívak.
Tedd szórakoztatóbbá a játékokat speciális effektusokkal
Speciális effektusok, például részecskerendszerek hozzáadása a Pygame-játékokhoz nagymértékben javíthatja a játékos élményét, és vonzóbbá és szórakoztatóbbá teheti játékait a játékosok számára. A részecskehatások, például ösvények, robbanások, köd és por megvalósításával látványosan lenyűgöző és dinamikus környezeteket hozhat létre.
Ne felejtse el figyelembe venni a teljesítményoptimalizálást, a részecske-újrahasznosítást és a vizuális konzisztenciát, miközben speciális effektusokat épít be játékaiba. Kreativitással és kísérletezéssel magasabb szintre emelheted Pygame játékaidat, és magával ragadó és izgalmas élményekkel ragadhatod meg a játékosokat.