Nejjednodušší hry můžete oživit animovanými částicemi. Pomocí těchto technik simulujte pohyb, výbuchy a další.

Pygame je oblíbená knihovna pro vývoj her pomocí Pythonu. Při vytváření her může přidání speciálních efektů výrazně zlepšit vizuální přitažlivost a celkový zážitek pro hráče.

Částicové systémy jsou výkonnou technikou pro vytváření dynamických a vizuálně zajímavých efektů, jako jsou mračna prachu, exploze, mlha a další.

Vytvořte jednoduchou hru

Než se ponoříte do částicových systémů a vizuálních vylepšení, začněte vytvořením jednoduché hry pomocí Pygame. Vytvořte nový soubor s názvem jednoduchá hra.py a začněte importem potřebných knihoven a inicializací Pygame. Nastavte herní okno se zadanou šířkou a výškou.

Kód použitý v tomto článku je k dispozici v tomto úložiště GitHub a můžete jej používat zdarma pod licencí MIT.

Uvnitř hlavní herní smyčky zpracovávat uživatelské události a aktualizovat pozici hráče na základě stisknutí kláves. Nakreslete obdélník pro objekt hráče, který používá pygame.draw.rect().

instagram viewer

Nakonec aktualizujte okno hry pomocí pygame.display.flip() a ukončit hru, když hráč opustí smyčku. Tato jednoduchá hra poslouží jako základ pro přidávání speciálních efektů pomocí částicových systémů.

Měli byste vidět bílý čtverec představující hráče, kterým můžete pohybovat doleva a doprava:

Vytváření různých typů částic

Nyní, když máte svou jednoduchou hru nastavenou, můžete přidat různé částicové systémy. Vytvořte třídy částic pro každý efekt a třídu částicového systému pro správu a aktualizaci částic.

Částicový efekt, když se hráč pohybuje

První částicový efekt bude stopa prachových částic emitovaných ze zad hráče, když hráč začne pohybovat pomocí myši nebo klávesnice. Směr prachových částic se navíc změní, když hráč změní směr.

Definujte a Částice třída, která představuje jednotlivou částici. Každá částice má počáteční polohu (X a y), náhodná rychlost (dx a dy) a životnost, která určuje, jak dlouho bude částice existovat.

Definujte také a ParticleSystem třída, která spravuje kolekci částic. Novou částici můžete do systému přidat pomocí add_particle() metoda. The Aktualizace() metoda aktualizuje všechny částice v systému a odstraňuje částice, které dosáhly konce své životnosti.

# Třída částic
třídaČástice:
def__init__(já, x, y):
self.x = x
self.y = y
self.dx = random.uniform(-1, 1)
self.dy = random.uniform(-1, 1)
sebe.životnost = 60

defAktualizace(já):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1

defkreslit(sebe, okno):
barva =(200, 200, 200)
pozice = (int (self.x), int (self.y))
pygame.draw.circle (okno, barva, pozice, 2)

# Třída částicového systému
třídaParticleSystem:
def__init__(já):
vlastní.částice = []

defpřidat_částici(já, x, y):
self.particles.append (částice (x, y))

defAktualizace(já):
pro částice v vlastní částice:
částic.update()

-li částice.životnost <= 0:
self.particles.remove (částice)

defkreslit(sebe, okno):
pro částice v vlastní částice:
částice.kreslit (okno)

Chcete-li integrovat částicový systém do vaší hry, musíte provést několik úprav hlavní herní smyčky. Vytvořte nový soubor s názvem pohyb-částice.py a přidejte kód s níže uvedenými aktualizacemi:

# Vytvořte částicový systém
částicový_systém = ParticleSystem()

# Hlavní herní smyčka
běh = Skutečný
hodiny = pygame.time. Hodiny()

zatímco běh:
dt = hodiny.tick(60) / 1000.0

pro událost v pygame.event.get():
-li event.type == pygame. PŘESTAT:
běh = Nepravdivé

částice_y = player_y + player_height // 2
částice_x = player_x + player_width

keys = pygame.key.get_pressed()
hranice = player_x < window_width - player_width

-li klíče [pygame. K_LEFT] a player_x > 0:
hráč_x -= 5
částicový_systém.přidat_částice (částice_x, částice_y)

-li klíče [pygame. K_RIGHT] a hranice:
player_x += 5
částicový_systém.přidat_částice (hráč_x, částice_y)

částicový_systém.update()

window.fill (ČERNÁ)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (okno, BÍLÁ, pozice hráče)
částicový_systém.draw (okno)

pygame.display.flip()

# Ukončete hru
pygame.quit()

Když nyní pohnete objektem hráče, měli byste vidět částice zdůrazňující pohyb:

Blast Effect

Dalším částicovým efektem bude výbuch, ke kterému dojde, když hráč vystřelí kulku. Efekt výbuchu se bude skládat z červeně zbarvených částic emitovaných z pozice střely.

Definujte a Částice třída podobná té předchozí, ale tentokrát zahrnuje a barva parametr reprezentující barvu částice.

Aktualizujte také ParticleSystem třída pro zpracování nového typu částic. The add_particle() metoda nyní vyžaduje další barva a vytvoří částice se zadanou barvou.

# Třída částic
třídaČástice:
def__init__(vlastní, x, y, barva):
self.x = x
self.y = y
self.dx = random.uniform(-2, 2)
self.dy = random.uniform(-2, 2)
sebe.životnost = 30
self.color = barva

defAktualizace(já):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1

defkreslit(sebe, okno):
pozice = (int (self.x), int (self.y))
pygame.draw.circle (okno, vlastní.barva, pozice, 3)

# Třída částicového systému
třídaParticleSystem:
def__init__(já):
vlastní.částice = []

defpřidat_částici(vlastní, x, y, barva):
self.particles.append (částice (x, y, barva)

defAktualizace(já):
pro částice v vlastní částice:
částic.update()

-li částice.životnost <= 0:
self.particles.remove (částice)

defkreslit(sebe, okno):
pro částice v vlastní částice:
částice.kreslit (okno)

Chcete-li začlenit efekt výbuchu do vaší hry, musíte provést několik úprav hlavní herní smyčky. Vytvořte nový název souboru shot-particle.py a přidejte kód s níže uvedenými aktualizacemi:

# Vytvořte částicový systém
částicový_systém = ParticleSystem()

# Hlavní herní smyčka
běh = Skutečný
hodiny = pygame.time. Hodiny()

zatímco běh:
dt = hodiny.tick(60) / 1000.0

pro událost v pygame.event.get():
-li event.type == pygame. PŘESTAT:
běh = Nepravdivé

keys = pygame.key.get_pressed()
hranice = player_x < window_width - player_width

-li klíče [pygame. K_LEFT] a player_x > 0:
hráč_x -= 5

-li klíče [pygame. K_RIGHT] a hranice:
player_x += 5

-li klíče [pygame. K_SPACE]:
bullet_x = player_x + player_width // 2
bullet_y = hráč_y
částicový_systém.přidat_částice (odrážka_x, odrážka_y, ČERVENÁ)

částicový_systém.update()

window.fill (ČERNÁ)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (okno, BÍLÁ, pozice hráče)
částicový_systém.draw (okno)

pygame.display.flip()

# Ukončete hru
pygame.quit()

Zde je výstup:

Když mezerník ( pygame. K_SPACE) je stlačen, přidejte částici do systému částic v místě střely. To vytváří efekt výbuchu s červenými částicemi.

Prachový efekt

Posledním vizuálním vylepšením, které můžete implementovat, je zaprášený efekt pozadí. Prachový efekt se bude skládat z malých šedých částic pohybujících se v kruhovém vzoru, čímž vznikne dynamické a prašné pozadí.

Aktualizujte Částice třídy zahrnout úhel a Rychlost pro každou částici. Úhel určuje směr pohybu a rychlost řídí, jak rychle se částice pohybují ve svém kruhovém vzoru. Upravte Aktualizace() způsob aktualizace polohy každé částice na základě jejího úhlu a rychlosti.

Aktualizujte také ParticleSystem třídy, aby zvládla nové chování částic. Částice se nyní v herním okně pohybují v kruhovém vzoru.

# Třída částic
třídaČástice:
def__init__(vlastní, x, y, poloměr):
self.x = x
self.y = y
self.radius = rádius
vlastní.úhel = náhodný.jednotný(0, 2 * math.pi)
self.speed = random.uniform(0.5, 1.5)

defAktualizace(já):
vlastní.úhel += 0.02
self.x += math.cos (vlastní úhel) * vlastní.rychlost
self.y += math.sin (self.angle) * self.speed

-li self.x < 0:
self.x = šířka_okna
elif self.x > šířka_okna:
self.x = 0

-li self.y < 0:
self.y = výška_okna
elif self.y > výška_okna:
self.y = 0

defkreslit(sebe, okno):
barva =(128, 128, 128)
pos = (int (self.x), int (self.y))
poloměr = int (self.radius)
pygame.draw.circle (okno, barva, pozice, poloměr)

# Třída částicového systému
třídaParticleSystem:
def__init__(já):
vlastní.částice = []

defpřidat_částici(vlastní, x, y, poloměr):
self.particles.append (částice (x, y, poloměr))

defAktualizace(já):
pro částice v vlastní částice:
částic.update()

defkreslit(sebe, okno):
pro částice v vlastní částice:
částice.kreslit (okno)

Chcete-li do hry integrovat efekt prachu, musíte provést několik úprav hlavní herní smyčky. Vytvořte nový soubor s názvem prach-částice.py a přidejte kód s níže uvedenými aktualizacemi:

# Vytvořte částicový systém pro prachový efekt
částicový_systém = ParticleSystem()

# Hlavní herní smyčka
běh = Skutečný
hodiny = pygame.time. Hodiny()

zatímco běh:
dt = hodiny.tick(60) / 1000.0

pro událost v pygame.event.get():
-li event.type == pygame. PŘESTAT:
běh = Nepravdivé

částice_x = random.randint(0, šířka_okna)
částice_y = náhodný.randint(0, výška_okna)

částicový_systém.přidat_částice (částice_x, částice_y, 1)

částicový_systém.update()

window.fill((0, 0, 0))
částicový_systém.draw (okno)

pygame.display.flip()

# Ukončete hru
pygame.quit()

Přidejte částice náhodně přes okno hry pomocí random.randint() funkce. Každá částice má počáteční poloměr 1. Aktualizujte a nakreslete částicový systém v okně hry, čímž vytvoříte dynamický a zaprášený efekt na pozadí.

Na obrazovce byste měli vidět mnoho částic, pohybujících se náhodně, ale plynule:

Nejlepší postupy pro speciální efekty

Při přidávání speciálních efektů do vaší hry Pygame zvažte následující osvědčené postupy:

Optimalizace výkonu

Částicové systémy mohou zahrnovat velké množství částic, což může ovlivnit výkon hry. Implementujte techniky, jako je prostorové dělení (např. Quadtree), abyste optimalizovali aktualizace a kreslení částic.

Recyklace částic

Místo vytváření a ničení částic v každém snímku zvažte opětovné použití částic resetováním jejich vlastností, když dosáhnou konce své životnosti. To pomáhá minimalizovat alokaci paměti a dealokaci.

Sdružování částic

Udržujte fond předem alokovaných částic, abyste se vyhnuli režii vytváření nových instancí během běhu. To může zlepšit výkon a snížit fragmentaci paměti.

Limit počtu částic

Abyste zabránili částicovým systémům zahltit herní obrazovku, nastavte limity na maximální počet částic a odstraňte částice, když tohoto limitu dosáhnou. To zajišťuje, že efekty zůstanou vizuálně přitažlivé, aniž by bránily hraní.

Vizuální konzistence

Udržujte konzistentní vizuální styl během celé hry, včetně částicových efektů. Ujistěte se, že barvy, velikosti a pohybové vzory částic jsou v souladu s celkovým tématem a uměleckým stylem.

Zvukové efekty

Přidejte zvukové efekty k doplnění vašich částicových efektů. Například přehrávejte zvuky výbuchu, když dojde k výbuchu, nebo zvuky okolí, když jsou aktivní efekty mlhy nebo prachu.

Udělejte ze hry větší zábavu se speciálními efekty

Přidání speciálních efektů, jako jsou částicové systémy, do vašich her Pygame může výrazně zlepšit zážitek hráče a učinit vaše hry pro hráče poutavější a zábavnější. Implementací částicových efektů, jako jsou stezky, exploze, mlha a prach, můžete vytvořit vizuálně ohromující a dynamická prostředí.

Při začleňování speciálních efektů do svých her nezapomeňte zvážit optimalizaci výkonu, recyklaci částic a vizuální konzistenci. Díky kreativitě a experimentování můžete své hry Pygame posunout na další úroveň a zaujmout hráče pohlcujícími a vzrušujícími zážitky.