Animeeritud osakestega saate elavdada lihtsamaid mänge. Nende tehnikate abil simuleerige liikumist, plahvatusi ja muud.

Pygame on populaarne raamatukogu Pythoni abil mängude arendamiseks. Mängude ehitamisel võib eriefektide lisamine oluliselt parandada mängijate visuaalset atraktiivsust ja üldist kogemust.

Osakeste süsteemid on võimas tehnika dünaamiliste ja visuaalselt huvitavate efektide, näiteks tolmupilvede, plahvatuste, udu ja muu loomiseks.

Looge lihtne mäng

Enne osakeste süsteemidesse ja visuaalsetesse täiustustesse sukeldumist alustage Pygame'i abil lihtsa mängu loomisest. Looge uus fail nimega lihtne-mäng.py ja alusta vajalike teekide importimisest ja Pygame initsialiseerimisest. Seadistage määratud laiuse ja kõrgusega mänguaken.

Selles artiklis kasutatud kood on saadaval selles GitHubi hoidla ja seda saate MIT-i litsentsi alusel tasuta kasutada.

Peamises mängutsüklis hallake kasutaja sündmusi ja värskendage mängija positsiooni klahvivajutuste põhjal. Joonista ristkülik mängija objekti jaoks, kasutades pygame.draw.rect().

instagram viewer

Lõpuks värskendage mängu akent kasutades pygame.display.flip() ja lõpetage mäng, kui mängija tsüklist väljub. See lihtne mäng on aluseks osakeste süsteemide abil eriefektide lisamisele.

Peaksite nägema valget ruutu, mis tähistab mängijat, keda saate vasakule ja paremale liigutada:

Erinevat tüüpi osakeste loomine

Nüüd, kui olete oma lihtsa mängu seadistanud, saate lisada erinevaid osakeste süsteeme. Looge iga efekti jaoks osakeste klassid ja osakeste haldamiseks ja värskendamiseks osakeste süsteemi klass.

Osakeste efekt, kui mängija liigub

Esimene osakeste efekt on tolmuosakeste jälg, mis eraldub mängija seljast, kui mängija hakkab liigutada hiire või klaviatuuriga. Lisaks muutub tolmuosakeste suund, kui mängija suunda muudab.

Määratlege a Osake klass, mis esindab üksikut osakest. Igal osakesel on algpositsioon (x ja y), juhuslik kiirus (dx ja dy) ja eluiga, mis määrab, kui kaua osake eksisteerib.

Samuti määratlege a Osakeste süsteem klass, mis haldab osakeste kogumit. Saate lisada süsteemi uue osakese, kasutades lisaosake() meetod. The värskenda() meetod värskendab kõiki süsteemi osakesi ja eemaldab osakesed, mis on jõudnud oma eluea lõppu.

# Osakeste klass
klassOsake:
def__selles__(ise, x, y):
ise.x = x
ise.y = y
ise.dx = random.uniform(-1, 1)
self.dy = random.uniform(-1, 1)
ise.eluaeg = 60

defvärskendada(ise):
ise.x += ise.dx
ise.y += ise.dy
ise.eluaeg -= 1

defjoonistada(ise, aken):
värv = (200, 200, 200)
positsioon = (int (self.x), int (self.y))
pygame.draw.circle (aken, värv, asukoht, 2)

# Osakeste süsteemi klass
klassOsakeste süsteem:
def__selles__(ise):
self.partticles = []

deflisa_osake(ise, x, y):
ise.osakesed.lisa (osake (x, y))

defvärskendada(ise):
jaoks osakest sisse iseosakesed:
particle.update()

kui osake.eluaeg <= 0:
ise.osakesed.eemalda (osake)

defjoonistada(ise, aken):
jaoks osakest sisse iseosakesed:
particle.draw (aken)

Osakeste süsteemi oma mängu integreerimiseks peate mängu põhitsüklis tegema mõned muudatused. Looge uus fail nimega liikumine-osakesed.py ja lisage kood koos allolevate värskendustega:

# Loo osakeste süsteem
osakeste_süsteem = Osakeste süsteem()

# Peamine mängusilmus
jookseb = Tõsi
kell = pygame.time. Kell ()

samal ajal jooksmine:
dt = kell.tick(60) / 1000.0

jaoks sündmus sisse pygame.event.get():
kui event.type == mängumäng. VÄLJA:
jookseb = Vale

particle_y = mängija_y + mängija_kõrgus // 2
osake_x = mängija_x + mängija_laius

võtmed = pygame.key.get_pressed()
piir = mängija_x < akna_laius - mängija_laius

kui võtmed[pygame. K_LEFT] ja mängija_x > 0:
mängija_x -= 5
osakeste_süsteem.add_osake (osake_x, osake_y)

kui võtmed[pygame. K_RIGHT] ja piir:
mängija_x += 5
particle_system.add_partticle (pleier_x, particle_y)

particle_system.update()

window.fill (MUST)
mängija_pos = (mängija_x, mängija_y, mängija_laius, mängija_kõrgus)
pygame.draw.rect (aken, VALGE, player_pos)
particle_system.draw (aken)

pygame.display.flip()

# Lõpeta mäng
pygame.quit()

Kui liigutate mängija objekti praegu, peaksite nägema liikumist rõhutavaid osakesi:

Blast Effect

Järgmine osakeste efekt on lööklaine, mis tekib siis, kui mängija tulistab kuuli. Plahvatuse efekt koosneb kuuli asukohast väljuvatest punastest osakestest.

Määratlege a Osake klass sarnane eelmisele, kuid seekord sisaldab a värvi parameeter, mis tähistab osakese värvi.

Samuti värskendage Osakeste süsteem klassi uue osakesetüübi käsitlemiseks. The lisaosake() meetod nõuab nüüd täiendavat värvi parameeter ja loob määratud värviga osakesed.

# Osakeste klass
klassOsake:
def__selles__(ise, x, y, värv):
ise.x = x
ise.y = y
ise.dx = random.uniform(-2, 2)
self.dy = random.uniform(-2, 2)
ise.eluaeg = 30
ise.värv = värv

defvärskendada(ise):
ise.x += ise.dx
ise.y += ise.dy
ise.eluaeg -= 1

defjoonistada(ise, aken):
positsioon = (int (self.x), int (self.y))
pygame.draw.circle (aken, isevärv, asukoht, 3)

# Osakeste süsteemi klass
klassOsakeste süsteem:
def__selles__(ise):
self.partticles = []

deflisa_osake(ise, x, y, värv):
ise.osakesed.lisa (osake (x, y, värv)

defvärskendada(ise):
jaoks osakest sisse iseosakesed:
particle.update()

kui osake.eluaeg <= 0:
ise.osakesed.eemalda (osake)

defjoonistada(ise, aken):
jaoks osakest sisse iseosakesed:
particle.draw (aken)

Plahvatusefekti oma mängu integreerimiseks peate põhimängutsüklis tegema mõned muudatused. Looge uus failinimi tulistada-osake.py ja lisage kood koos allolevate värskendustega:

# Loo osakeste süsteem
osakeste_süsteem = Osakeste süsteem()

# Peamine mängusilmus
jookseb = Tõsi
kell = pygame.time. Kell ()

samal ajal jooksmine:
dt = kell.tick(60) / 1000.0

jaoks sündmus sisse pygame.event.get():
kui event.type == mängumäng. VÄLJA:
jookseb = Vale

võtmed = pygame.key.get_pressed()
piir = mängija_x < akna_laius - mängija_laius

kui võtmed[pygame. K_LEFT] ja mängija_x > 0:
mängija_x -= 5

kui võtmed[pygame. K_RIGHT] ja piir:
mängija_x += 5

kui võtmed[pygame. K_SPACE]:
bullet_x = mängija_x + mängija_laius // 2
bullet_y = mängija_y
osakeste_süsteem.add_osake (bullet_x, bullet_y, PUNANE)

particle_system.update()

window.fill (MUST)
mängija_pos = (mängija_x, mängija_y, mängija_laius, mängija_kõrgus)
pygame.draw.rect (aken, VALGE, player_pos)
particle_system.draw (aken)

pygame.display.flip()

# Lõpeta mäng
pygame.quit()

Siin on väljund:

Kui tühikuklahv ( pygame. K_SPACE) on vajutatud, lisage osakeste süsteemi kuuli asukohas. See loob punaste osakestega plahvatusefekti.

Tolmuefekt

Viimane visuaalne täiustus, mida saate rakendada, on tolmune taustaefekt. Tolmuefekt koosneb väikestest hallidest osakestest, mis liiguvad ringikujuliselt, luues dünaamilise ja tolmuse tausta.

Värskendage Osake klassi lisada an nurk ja kiirust iga osakese kohta. Nurk määrab liikumise suuna ja kiirus määrab, kui kiiresti osakesed ringikujuliselt liiguvad. Muutke värskenda() meetod iga osakese asukoha värskendamiseks selle nurga ja kiiruse alusel.

Samuti värskendage Osakeste süsteem klassi osakeste uue käitumise käsitlemiseks. Osakesed liiguvad nüüd mänguaknas ringikujuliselt.

# Osakeste klass
klassOsake:
def__selles__(ise, x, y, raadius):
ise.x = x
ise.y = y
ise.raadius = raadius
self.angle = random.uniform(0, 2 * math.pi)
self.speed = random.uniform(0.5, 1.5)

defvärskendada(ise):
ise.nurk += 0.02
ise.x += math.cos (self.angle) * ise.kiirus
ise.y += math.sin (self.angle) * ise.kiirus

kui ise.x < 0:
ise.x = akna_laius
elif self.x > window_width:
ise.x = 0

kui ise.y < 0:
ise.y = akna_kõrgus
elif self.y > window_height:
ise.y = 0

defjoonistada(ise, aken):
värv = (128, 128, 128)
pos = (int (self.x), int (self.y))
raadius = int (self.radius)
pygame.draw.circle (aken, värv, pos, raadius)

# Osakeste süsteemi klass
klassOsakeste süsteem:
def__selles__(ise):
self.partticles = []

deflisa_osake(ise, x, y, raadius):
ise.osakesed.lisa (osake (x, y, raadius))

defvärskendada(ise):
jaoks osakest sisse iseosakesed:
particle.update()

defjoonistada(ise, aken):
jaoks osakest sisse iseosakesed:
particle.draw (aken)

Tolmuefekti mängu integreerimiseks peate mängu põhitsüklis tegema mõned muudatused. Looge uus fail nimega tolmuosake.py ja lisage kood koos allolevate värskendustega:

# Loo osakeste süsteem tolmuefekti jaoks
osakeste_süsteem = Osakeste süsteem()

# Peamine mängusilmus
jookseb = Tõsi
kell = pygame.time. Kell ()

samal ajal jooksmine:
dt = kell.tick(60) / 1000.0

jaoks sündmus sisse pygame.event.get():
kui event.type == mängumäng. VÄLJA:
jookseb = Vale

particle_x = random.randint(0, akna_laius)
particle_y = random.randint(0, akna_kõrgus)

osakeste_süsteem.add_osake (osake_x, osake_y, 1)

particle_system.update()

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

pygame.display.flip()

# Lõpeta mäng
pygame.quit()

Lisage osakesi juhuslikult mänguaknas kasutades random.randint() funktsiooni. Igal osakesel on esialgne raadius 1. Värskendage ja joonistage mänguaknale osakeste süsteem, luues dünaamilise ja tolmuse taustaefekti.

Peaksite nägema ekraanil palju osakesi, mis liiguvad juhuslikult, kuid sujuvalt:

Eriefektide parimad tavad

Pygame'i mängule eriefektide lisamisel arvestage järgmiste parimate tavadega.

Toimivuse optimeerimine

Osakeste süsteemid võivad sisaldada suurt hulka osakesi, mis võivad mängu jõudlust mõjutada. Rakendage selliseid tehnikaid nagu ruumiline jaotus (nt Quadtree), et optimeerida osakeste värskendusi ja joonistamist.

Tahkete osakeste ringlussevõtt

Selle asemel, et luua ja hävitada osakesi igas kaadris, kaaluge osakeste taaskasutamist, lähtestades nende omadused pärast nende eluea lõppu. See aitab minimeerida mälu eraldamist ja eraldamist.

Osakeste ühendamine

Säilitage eelnevalt eraldatud osakeste kogum, et vältida uute eksemplaride loomisega käitamise ajal tekkivaid lisakulusid. See võib parandada jõudlust ja vähendada mälu killustumist.

Osakeste arvu piiramine

Selleks, et osakeste süsteemid mänguekraani üle ei koormaks, seadke osakeste maksimaalsele arvule piirangud ja eemaldage osakesed, kui need selle piirini jõuavad. See tagab, et efektid jäävad visuaalselt atraktiivseks ilma mängimist takistamata.

Visuaalne järjepidevus

Säilitage kogu mängu jooksul ühtne visuaalne stiil, sealhulgas osakeste efektid. Veenduge, et osakeste värvid, suurused ja liikumismustrid oleksid üldise teema ja kunstistiiliga kooskõlas.

Heliefektid

Lisage heliefekte et täiendada teie osakeste efekte. Näiteks esitage plahvatusheli, kui tekib plahvatusefekt, või ümbritsevaid helisid, kui udu- või tolmuefektid on aktiivsed.

Muutke mängud eriefektide abil lõbusamaks

Eriefektide (nt osakeste süsteemide) lisamine Pygame'i mängudele võib oluliselt parandada mängija kogemust ning muuta teie mängud mängijate jaoks kaasahaaravamaks ja lõbusamaks. Rakendades osakeste efekte, nagu jäljed, plahvatused, udu ja tolm, saate luua visuaalselt vapustavaid ja dünaamilisi keskkondi.

Ärge unustage kaaluda jõudluse optimeerimist, osakeste taaskasutamist ja visuaalset järjepidevust, lisades mängudesse eriefekte. Loovuse ja katsetamise abil saate viia oma Pygame'i mängud järgmisele tasemele ning võluda mängijaid kaasahaarava ja põneva kogemusega.