Možete oživjeti najjednostavnije igre s animiranim česticama. Simulirajte kretanje, eksplozije i više pomoću ovih tehnika.

Pygame je popularna biblioteka za razvoj igara pomoću Pythona. Dok gradite igre, dodavanje specijalnih efekata može uvelike poboljšati vizualnu privlačnost i cjelokupno iskustvo za igrače.

Sustavi čestica su moćna tehnika za stvaranje dinamičnih i vizualno zanimljivih efekata kao što su oblaci prašine, eksplozije, magla i drugo.

Stvorite jednostavnu igru

Prije nego što zaronite u sustave čestica i vizualna poboljšanja, započnite stvaranjem jednostavne igre koristeći Pygame. Stvorite novu datoteku pod nazivom jednostavna igra.py i započnite s uvozom potrebnih biblioteka i inicijalizacijom Pygamea. Postavite prozor igre s određenom širinom i visinom.

Kôd korišten u ovom članku dostupan je u ovom GitHub spremište i besplatan je za korištenje pod MIT licencom.

Unutar glavne petlje igre, upravljajte korisničkim događajima i ažurirajte poziciju igrača na temelju pritiskanja tipki. Nacrtajte pravokutnik za objekt igrača koji koristi pygame.draw.rect().

instagram viewer

Na kraju, ažurirajte prozor igre pomoću pygame.display.flip() i napustiti igru ​​kada igrač izađe iz petlje. Ova jednostavna igra poslužit će kao temelj za dodavanje specijalnih efekata pomoću sustava čestica.

Trebali biste vidjeti bijeli kvadrat koji predstavlja igrača kojeg možete pomicati lijevo i desno:

Stvaranje raznih vrsta čestica

Sada kada ste postavili jednostavnu igru, možete dodati različite sustave čestica. Stvorite klase čestica za svaki učinak i klasu sustava čestica za upravljanje i ažuriranje čestica.

Efekt čestica kada se igrač kreće

Prvi efekt čestica bit će trag čestica prašine koji se emitiraju s leđa igrača kada igrač počne pomicanje unosom pomoću miša ili tipkovnice. Osim toga, smjer čestica prašine će se promijeniti kada igrač promijeni smjer.

Definirajte a Čestica klasa koja predstavlja pojedinačnu česticu. Svaka čestica ima početni položaj (x i g), slučajna brzina (dx i dy), i životni vijek koji određuje koliko će dugo čestica postojati.

Također, definirajte a Sustav čestica klasa koja upravlja skupom čestica. Možete dodati novu česticu u sustav pomoću dodaj_česticu() metoda. The Ažuriraj() metoda ažurira sve čestice u sustavu i uklanja čestice koje su došle do kraja svog vijeka trajanja.

# Klasa čestica
razredaČestica:
def__u tome__(ja, x, y):
sebe.x = x
self.y = y
self.dx = random.uniform(-1, 1)
self.dy = random.uniform(-1, 1)
sam.životni vijek = 60

defAžuriraj(sebe):
self.x += self.dx
self.y += self.dy
sebe.životni vijek -= 1

defcrtati(ja, prozor):
boja = (200, 200, 200)
pozicija = (int (self.x), int (self.y))
pygame.draw.circle (prozor, boja, pozicija, 2)

# Klasa sustava čestica
razredaSustav čestica:
def__u tome__(sebe):
samo.čestice = []

defdodaj_česticu(ja, x, y):
self.particles.append (čestica (x, y))

defAžuriraj(sebe):
za čestica u samo.čestice:
particle.update()

ako čestica.životni vijek <= 0:
samo.čestice.ukloniti (česticu)

defcrtati(ja, prozor):
za čestica u samo.čestice:
particle.draw (prozor)

Da biste integrirali sustav čestica u svoju igru, trebate napraviti nekoliko izmjena u glavnoj petlji igre. Stvorite novu datoteku pod nazivom kretanje-čestica.py i dodajte kod sa sljedećim ažuriranjima:

# Stvorite sustav čestica
sustav_čestica = Sustav čestica()

# Glavna petlja igre
trčanje = Pravi
sat = pygame.vrijeme. Sat()

dok trčanje:
dt = clock.tick(60) / 1000.0

za događaj u pygame.event.get():
ako event.type == pygame. PRESTATI:
trčanje = lažno

čestica_y = igrač_y + igrač_visina // 2
čestica_x = igrač_x + širina_igrača

tipke = pygame.key.get_pressed()
granica = player_x < window_width - player_width

ako ključevi[pygame. K_LEFT] i igrač_x > 0:
igrač_x -= 5
particle_system.add_particle (particle_x, particle_y)

ako ključevi[pygame. K_DESNO] i granica:
igrač_x += 5
particle_system.add_particle (player_x, particle_y)

particle_system.update()

window.fill (CRNO)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (prozor, BIJELI, player_pos)
particle_system.draw (prozor)

pygame.display.flip()

# Napustite igru
pygame.quit()

Kada sada pomaknete objekt igrača, trebali biste vidjeti čestice koje naglašavaju kretanje:

Efekt eksplozije

Sljedeći efekt čestica bit će efekt eksplozije koji se javlja kada igrač ispali metak. Učinak eksplozije sastojat će se od čestica crvene boje koje se emitiraju iz položaja metka.

Definirajte a Čestica razred sličan prethodnom, ali ovaj put uključuje a boja parametar koji predstavlja boju čestice.

Također ažurirajte Sustav čestica klasa za rukovanje novom vrstom čestica. The dodaj_česticu() metoda sada zahtijeva dodatnu boja parametar i stvara čestice navedene boje.

# Klasa čestica
razredaČestica:
def__u tome__(ja, x, y, boja):
sebe.x = x
self.y = y
self.dx = random.uniform(-2, 2)
self.dy = random.uniform(-2, 2)
sam.životni vijek = 30
self.color = boja

defAžuriraj(sebe):
self.x += self.dx
self.y += self.dy
sebe.životni vijek -= 1

defcrtati(ja, prozor):
pozicija = (int (self.x), int (self.y))
pygame.draw.circle (prozor, self.color, pozicija, 3)

# Klasa sustava čestica
razredaSustav čestica:
def__u tome__(sebe):
samo.čestice = []

defdodaj_česticu(ja, x, y, boja):
self.particles.append (čestica (x, y, boja)

defAžuriraj(sebe):
za čestica u samo.čestice:
particle.update()

ako čestica.životni vijek <= 0:
samo.čestice.ukloniti (česticu)

defcrtati(ja, prozor):
za čestica u samo.čestice:
particle.draw (prozor)

Kako biste integrirali efekt eksplozije u svoju igru, trebate napraviti nekoliko izmjena u glavnoj petlji igre. Stvorite novi naziv datoteke izdanak-čestica.py i dodajte kod sa sljedećim ažuriranjima:

# Stvorite sustav čestica
sustav_čestica = Sustav čestica()

# Glavna petlja igre
trčanje = Pravi
sat = pygame.vrijeme. Sat()

dok trčanje:
dt = clock.tick(60) / 1000.0

za događaj u pygame.event.get():
ako event.type == pygame. PRESTATI:
trčanje = lažno

tipke = pygame.key.get_pressed()
granica = player_x < window_width - player_width

ako ključevi[pygame. K_LEFT] i igrač_x > 0:
igrač_x -= 5

ako ključevi[pygame. K_DESNO] i granica:
igrač_x += 5

ako ključevi[pygame. K_SPACE]:
bullet_x = player_x + player_width // 2
metak_y = igrač_y
particle_system.add_particle (bullet_x, bullet_y, RED)

particle_system.update()

window.fill (CRNO)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (prozor, BIJELI, player_pos)
particle_system.draw (prozor)

pygame.display.flip()

# Napustite igru
pygame.quit()

Evo rezultata:

Kada razmaknica ( pygame. K_PROSTOR) je pritisnut, dodajte česticu u sustav čestica na mjestu metka. To stvara efekt eksplozije s crvenim česticama.

Efekt prašine

Posljednje vizualno poboljšanje koje možete primijeniti je efekt prašnjave pozadine. Efekt prašine sastojat će se od malih sivih čestica koje se kreću u kružnom uzorku, stvarajući dinamičnu i prašnjavu pozadinu.

Ažurirajte Čestica razred uključiti an kut i ubrzati za svaku česticu. Kut određuje smjer kretanja, a brzina kontrolira koliko se brzo čestice kreću u svom kružnom uzorku. Izmijenite Ažuriraj() metoda za ažuriranje položaja svake čestice na temelju njezina kuta i brzine.

Također ažurirajte Sustav čestica klase za rukovanje novim ponašanjem čestica. Čestice se sada kreću u kružnom uzorku unutar prozora igre.

# Klasa čestica
razredaČestica:
def__u tome__(ja, x, y, polumjer):
sebe.x = x
self.y = y
sam.radijus = radijus
self.angle = random.uniform(0, 2 * math.pi)
self.speed = random.uniform(0.5, 1.5)

defAžuriraj(sebe):
sam.kut += 0.02
self.x += math.cos (self.angle) * self.speed
self.y += math.sin (self.angle) * self.speed

ako sebe.x < 0:
self.x = širina_prozora
elif self.x > window_width:
sebe.x = 0

ako sam.y < 0:
self.y = visina_prozora
elif self.y > window_height:
self.y = 0

defcrtati(ja, prozor):
boja = (128, 128, 128)
pos = (int (self.x), int (self.y))
radijus = int (self.radius)
pygame.draw.circle (prozor, boja, položaj, radijus)

# Klasa sustava čestica
razredaSustav čestica:
def__u tome__(sebe):
samo.čestice = []

defdodaj_česticu(ja, x, y, polumjer):
self.particles.append (čestica (x, y, polumjer))

defAžuriraj(sebe):
za čestica u samo.čestice:
particle.update()

defcrtati(ja, prozor):
za čestica u samo.čestice:
particle.draw (prozor)

Da biste integrirali efekt prašine u svoju igru, trebate napraviti nekoliko izmjena u glavnoj petlji igre. Stvorite novu datoteku pod nazivom čestica prašine.py i dodajte kod sa sljedećim ažuriranjima:

# Stvorite sustav čestica za učinak prašine
sustav_čestica = Sustav čestica()

# Glavna petlja igre
trčanje = Pravi
sat = pygame.vrijeme. Sat()

dok trčanje:
dt = clock.tick(60) / 1000.0

za događaj u pygame.event.get():
ako event.type == pygame. PRESTATI:
trčanje = lažno

particle_x = random.randint(0, širina_prozora)
particle_y = random.randint(0, visina_prozora)

particle_system.add_particle (čestica_x, čestica_y, 1)

particle_system.update()

window.fill((0, 0, 0))
particle_system.draw (prozor)

pygame.display.flip()

# Napustite igru
pygame.quit()

Dodajte čestice nasumično preko prozora igre pomoću random.randint() funkcija. Svaka čestica ima početni radijus od 1. Ažurirajte i nacrtajte sustav čestica na prozoru igre, stvarajući dinamičan i prašnjav efekt pozadine.

Trebali biste vidjeti mnogo čestica na ekranu koje se kreću nasumično, ali glatko:

Najbolji postupci za specijalne efekte

Kada dodajete specijalne efekte svojoj Pygame igri, razmotrite sljedeće najbolje prakse:

Optimizacija performansi

Sustavi čestica mogu uključivati ​​velik broj čestica, što može utjecati na performanse igre. Implementirajte tehnike poput prostorne particije (npr. Quadtree) za optimizaciju ažuriranja i crtanja čestica.

Recikliranje čestica

Umjesto stvaranja i uništavanja čestica u svakom okviru, razmislite o ponovnoj upotrebi čestica poništavanjem njihovih svojstava kada dođu do kraja svog životnog vijeka. To pomaže minimizirati dodjelu i oslobađanje memorije.

Skupljanje čestica

Održavajte skup unaprijed dodijeljenih čestica kako biste izbjegli troškove stvaranja novih instanci tijekom izvođenja. To može poboljšati performanse i smanjiti fragmentaciju memorije.

Ograničite broj čestica

Kako biste spriječili da sustavi čestica preplave zaslon igre, postavite ograničenja na maksimalan broj čestica i uklonite čestice kada dosegnu to ograničenje. To osigurava da efekti ostanu vizualno privlačni bez ometanja igranja.

Vizualna dosljednost

Održavajte dosljedan vizualni stil tijekom igre, uključujući efekte čestica. Osigurajte da boje, veličine i obrasci kretanja čestica budu usklađeni s cjelokupnom temom i umjetničkim stilom.

Zvučni efekti

Dodajte zvučne efekte da nadopuni svoje efekte čestica. Na primjer, reproducirajte zvukove eksplozije kada se pojavi efekt eksplozije ili ambijentalne zvukove kada su aktivni efekti magle ili prašine.

Učinite igre zabavnijim uz posebne efekte

Dodavanje posebnih efekata, kao što su sustavi čestica, u vaše Pygame igre može uvelike poboljšati iskustvo igrača i učiniti vaše igre privlačnijim i zabavnijim za igrače. Implementacijom efekata čestica kao što su tragovi, eksplozije, magla i prašina, možete stvoriti vizualno zapanjujuće i dinamično okruženje.

Ne zaboravite uzeti u obzir optimizaciju performansi, recikliranje čestica i vizualnu dosljednost dok uključujete posebne efekte u svoje igre. Uz kreativnost i eksperimentiranje, svoje Pygame igre možete podići na višu razinu i očarati igrače impresivnim i uzbudljivim iskustvima.