Du kan live opp de enkleste spillene med animerte partikler. Simuler bevegelse, eksplosjoner og mer ved å bruke disse teknikkene.

Pygame er et populært bibliotek for utvikling av spill med Python. Når du bygger spill, kan det å legge til spesialeffekter i stor grad forbedre den visuelle appellen og den generelle opplevelsen for spillere.

Partikkelsystemer er en kraftig teknikk for å skape dynamiske og visuelt interessante effekter som støvskyer, eksplosjoner, tåke og mer.

Lag et enkelt spill

Før du dykker inn i partikkelsystemer og visuelle forbedringer, start med å lage et enkelt spill med Pygame. Opprett en ny fil med navnet simple-game.py og start med å importere de nødvendige bibliotekene og initialisere Pygame. Sett opp spillvinduet med en spesifisert bredde og høyde.

Koden som brukes i denne artikkelen er tilgjengelig i denne GitHub-depot og er gratis for deg å bruke under MIT-lisensen.

Inne i hovedspillsløyfen, håndter brukerhendelser og oppdater spillerens posisjon basert på tastetrykk. Tegn et rektangel for spillerobjektet som bruker pygame.draw.rect().

instagram viewer

Til slutt oppdaterer du spillvinduet med pygame.display.flip() og avslutte spillet når spilleren går ut av loopen. Dette enkle spillet vil tjene som grunnlaget for å legge til spesialeffekter ved hjelp av partikkelsystemer.

Du bør se en hvit firkant som representerer spilleren som du kan flytte til venstre og høyre:

Opprette forskjellige partikkeltyper

Nå som du har satt opp det enkle spillet ditt, kan du legge til forskjellige partikkelsystemer. Lag partikkelklasser for hver effekt og en partikkelsystemklasse for å administrere og oppdatere partiklene.

Partikkeleffekt når spilleren beveger seg

Den første partikkeleffekten vil være et spor av støvpartikler som sendes ut fra spillerens rygg når spilleren begynner å flytte med mus eller tastaturinndata. I tillegg vil retningen til støvpartiklene endres når spilleren endrer retning.

Definer a Partikkel klasse som representerer en individuell partikkel. Hver partikkel har en startposisjon (x og y), en tilfeldig hastighet (dx og dy), og en levetid som bestemmer hvor lenge partikkelen vil eksistere.

Definer også en PartikkelSystem klasse som forvalter en samling av partikler. Du kan legge til en ny partikkel til systemet ved å bruke add_particle() metode. De Oppdater() metoden oppdaterer alle partikler i systemet og fjerner partikler som har nådd slutten av levetiden.

# Partikkelklasse
klassePartikkel:
def__i det__(selv, x, y):
selv.x = x
self.y = y
self.dx = random.uniform(-1, 1)
self.dy = random.uniform(-1, 1)
self.lifetime = 60

defOppdater(selv):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1

deftegne(selv, vindu):
farge = (200, 200, 200)
posisjon = (int (self.x), int (self.y))
pygame.draw.circle (vindu, farge, posisjon, 2)

# Partikkelsystemklasse
klassePartikkelSystem:
def__i det__(selv):
self.particles = []

defadd_particle(selv, x, y):
self.particles.append (Partikkel (x, y))

defOppdater(selv):
til partikkel i self.particles:
particle.update()

hvis partikkel.levetid <= 0:
selv.partikler.fjerne (partikkel)

deftegne(selv, vindu):
til partikkel i self.particles:
particle.draw (vindu)

For å integrere partikkelsystemet i spillet ditt, må du gjøre noen få modifikasjoner i hovedspillsløyfen. Opprett en ny fil med navnet bevegelsespartikler.py og legg til koden med oppdateringene nedenfor:

# Lag partikkelsystem
partikkelsystem = partikkelsystem()

# Hovedspillsløyfe
kjører = ekte
klokke = pygame.time. Klokke()

samtidig som løping:
dt = klokke.tick(60) / 1000.0

til begivenhet i pygame.event.get():
hvis event.type == pygame. SLUTTE:
kjører = Falsk

particle_y = player_y + player_height // 2
partikkel_x = spiller_x + spillerbredde

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

hvis keys[pygame. K_LEFT] og player_x > 0:
player_x -= 5
partikkelsystem.add_partikkel (partikkel_x, partikkel_y)

hvis keys[pygame. K_RIGHT] og grense:
player_x += 5
particle_system.add_particle (spiller_x, partikkel_y)

particle_system.update()

window.fill (SVART)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (vindu, WHITE, player_pos)
particle_system.draw (vindu)

pygame.display.flip()

# Avslutt spillet
pygame.quit()

Når du flytter spillerobjektet nå, bør du se partikler som understreker bevegelsen:

Blast effekt

Den neste partikkeleffekten vil være en eksplosjonseffekt som oppstår når spilleren skyter en kule. Sprengningseffekten vil bestå av rødfargede partikler som sendes ut fra kulens posisjon.

Definer a Partikkel klasse lik den forrige, men inkluderer denne gangen en farge parameter for å representere fargen på partikkelen.

Oppdater også PartikkelSystem klasse for å håndtere den nye partikkeltypen. De add_particle() metoden tar nå en ekstra farge parameter og lager partikler med den angitte fargen.

# Partikkelklasse
klassePartikkel:
def__i det__(selv, x, y, farge):
selv.x = x
self.y = y
self.dx = random.uniform(-2, 2)
self.dy = random.uniform(-2, 2)
self.lifetime = 30
self.color = farge

defOppdater(selv):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1

deftegne(selv, vindu):
posisjon = (int (self.x), int (self.y))
pygame.draw.circle (vindu, selv.farge, posisjon, 3)

# Partikkelsystemklasse
klassePartikkelSystem:
def__i det__(selv):
self.particles = []

defadd_particle(selv, x, y, farge):
self.particles.append (Partikkel (x, y, farge)

defOppdater(selv):
til partikkel i self.particles:
particle.update()

hvis partikkel.levetid <= 0:
selv.partikler.fjerne (partikkel)

deftegne(selv, vindu):
til partikkel i self.particles:
particle.draw (vindu)

For å integrere blast-effekten i spillet ditt, må du gjøre noen endringer i hovedspillsløyfen. Opprett et nytt filnavn shoot-particle.py og legg til koden med oppdateringene nedenfor:

# Lag partikkelsystem
partikkelsystem = partikkelsystem()

# Hovedspillsløyfe
kjører = ekte
klokke = pygame.time. Klokke()

samtidig som løping:
dt = klokke.tick(60) / 1000.0

til begivenhet i pygame.event.get():
hvis event.type == pygame. SLUTTE:
kjører = Falsk

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

hvis keys[pygame. K_LEFT] og player_x > 0:
player_x -= 5

hvis keys[pygame. K_RIGHT] og grense:
player_x += 5

hvis keys[pygame. K_SPACE]:
bullet_x = player_x + player_width // 2
bullet_y = spiller_y
particle_system.add_particle (bullet_x, bullet_y, RED)

particle_system.update()

window.fill (SVART)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (vindu, WHITE, player_pos)
particle_system.draw (vindu)

pygame.display.flip()

# Avslutt spillet
pygame.quit()

Her er utgangen:

Når mellomromstasten ( pygame. K_SPACE) er trykket, legg til en partikkel til partikkelsystemet ved posisjonen til kulen. Dette skaper sprengningseffekten med røde partikler.

Støveffekt

Den siste visuelle forbedringen du kan implementere er en støvete bakgrunnseffekt. Støveffekten vil bestå av små grå partikler som beveger seg i et sirkulært mønster, og skaper en dynamisk og støvete bakgrunn.

Oppdater Partikkel klasse for å inkludere en vinkel og hastighet for hver partikkel. Vinkelen bestemmer bevegelsesretningen, og hastigheten styrer hvor raskt partiklene beveger seg i sitt sirkulære mønster. Endre Oppdater() metode for å oppdatere posisjonen til hver partikkel basert på dens vinkel og hastighet.

Oppdater også PartikkelSystem klasse for å håndtere den nye partikkeloppførselen. Partiklene beveger seg nå i et sirkulært mønster innenfor spillvinduet.

# Partikkelklasse
klassePartikkel:
def__i det__(selv, x, y, radius):
selv.x = x
self.y = y
self.radius = radius
self.angle = random.uniform(0, 2 * math.pi)
self.speed = random.uniform(0.5, 1.5)

defOppdater(selv):
selv.vinkel += 0.02
self.x += math.cos (self.angle) * self.speed
self.y += math.sin (selv.vinkel) * self.speed

hvis self.x < 0:
self.x = window_width
elif self.x > window_width:
self.x = 0

hvis self.y < 0:
self.y = vindu_høyde
elif self.y > window_height:
self.y = 0

deftegne(selv, vindu):
farge = (128, 128, 128)
pos = (int (self.x), int (self.y))
radius = int (selv.radius)
pygame.draw.circle (vindu, farge, pos, radius)

# Partikkelsystemklasse
klassePartikkelSystem:
def__i det__(selv):
self.particles = []

defadd_particle(selv, x, y, radius):
self.particles.append (Partikkel (x, y, radius))

defOppdater(selv):
til partikkel i self.particles:
particle.update()

deftegne(selv, vindu):
til partikkel i self.particles:
particle.draw (vindu)

For å integrere støveffekten i spillet ditt, må du gjøre noen få modifikasjoner i hovedspillsløyfen. Opprett en ny fil med navnet dust-particle.py og legg til koden med oppdateringene nedenfor:

# Lag partikkelsystem for støveffekt
partikkelsystem = partikkelsystem()

# Hovedspillsløyfe
kjører = ekte
klokke = pygame.time. Klokke()

samtidig som løping:
dt = klokke.tick(60) / 1000.0

til begivenhet i pygame.event.get():
hvis event.type == pygame. SLUTTE:
kjører = Falsk

partikkel_x = random.randint(0, window_width)
partikkel_y = random.randint(0, window_height)

particle_system.add_particle (partikkel_x, partikkel_y, 1)

particle_system.update()

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

pygame.display.flip()

# Avslutt spillet
pygame.quit()

Legg til partikler tilfeldig over spillvinduet ved å bruke random.randint() funksjon. Hver partikkel har en initial radius på 1. Oppdater og tegn partikkelsystemet på spillvinduet, og skape en dynamisk og støvete bakgrunnseffekt.

Du bør se mange partikler på skjermen som beveger seg tilfeldig, men jevnt:

Beste praksis for spesialeffekter

Når du legger til spesialeffekter i Pygame-spillet ditt, bør du vurdere følgende beste fremgangsmåter:

Ytelsesoptimalisering

Partikkelsystemer kan involvere et stort antall partikler, noe som kan påvirke spillytelsen. Implementer teknikker som romlig partisjonering (f.eks. Quadtree) for å optimalisere partikkeloppdateringer og tegning.

Resirkulering av partikler

I stedet for å lage og ødelegge partikler i hver ramme, bør du vurdere å gjenbruke partikler ved å tilbakestille egenskapene deres når de når slutten av levetiden. Dette bidrar til å minimere minnetildeling og deallokering.

Partikkelpooling

Oppretthold en pool med forhåndstildelte partikler for å unngå overhead ved å opprette nye forekomster under kjøring. Dette kan forbedre ytelsen og redusere minnefragmentering.

Begrens antall partikler

For å forhindre at partikkelsystemer overvelder spillskjermen, sett grenser for maksimalt antall partikler og fjern partikler når de når denne grensen. Dette sikrer at effektene forblir visuelt tiltalende uten å hindre spillingen.

Visuell konsistens

Oppretthold en konsistent visuell stil gjennom hele spillet, inkludert partikkeleffekter. Sørg for at farger, størrelser og bevegelsesmønstre for partikler er i samsvar med det overordnede temaet og kunststilen.

Lydeffekter

Legg til lydeffekter for å utfylle partikkeleffektene dine. Spill for eksempel eksplosjonslyder når en eksplosjonseffekt oppstår eller omgivelseslyder når tåke- eller støveffekter er aktive.

Gjør spill morsommere med spesialeffekter

Å legge til spesialeffekter, for eksempel partikkelsystemer, til Pygame-spillene dine kan forbedre spilleropplevelsen betraktelig og gjøre spillene dine mer engasjerende og morsomme for spillere. Ved å implementere partikkeleffekter som stier, eksplosjoner, tåke og støv, kan du skape visuelt imponerende og dynamiske miljøer.

Husk å vurdere ytelsesoptimalisering, partikkelresirkulering og visuell konsistens mens du inkluderer spesialeffekter i spillene dine. Med kreativitet og eksperimentering kan du ta Pygame-spillene dine til neste nivå og fengsle spillere med oppslukende og spennende opplevelser.