Najpreprostejše igre lahko poživite z animiranimi delci. S temi tehnikami simulirajte gibanje, eksplozije in drugo.

Pygame je priljubljena knjižnica za razvoj iger z uporabo Pythona. Med gradnjo iger lahko dodajanje posebnih učinkov močno poveča vizualno privlačnost in splošno izkušnjo za igralce.

Sistemi delcev so zmogljiva tehnika za ustvarjanje dinamičnih in vizualno zanimivih učinkov, kot so oblaki prahu, eksplozije, megla in drugo.

Ustvari preprosto igro

Preden se potopite v sisteme delcev in vizualne izboljšave, začnite z ustvarjanjem preproste igre z uporabo Pygame. Ustvari novo datoteko z imenom simple-game.py in začnite z uvozom potrebnih knjižnic in inicializacijo Pygame. Nastavite okno igre z določeno širino in višino.

Koda, uporabljena v tem članku, je na voljo tukaj Repozitorij GitHub in je brezplačen za uporabo pod licenco MIT.

Znotraj glavne igralne zanke obravnavajte uporabniške dogodke in posodabljajte položaj igralca glede na pritiske tipk. Narišite pravokotnik za objekt igralca, ki uporablja pygame.draw.rect().

instagram viewer

Končno posodobite okno igre z uporabo pygame.display.flip() in zapustite igro, ko igralec zapusti zanko. Ta preprosta igra bo služila kot osnova za dodajanje posebnih učinkov z uporabo sistemov delcev.

Moral bi videti bel kvadrat, ki predstavlja igralca, ki ga lahko premikaš levo in desno:

Ustvarjanje različnih vrst delcev

Zdaj, ko imate nastavljeno preprosto igro, lahko dodate različne sisteme delcev. Ustvarite razrede delcev za vsak učinek in sistemski razred delcev za upravljanje in posodabljanje delcev.

Učinek delcev, ko se igralec premika

Prvi učinek delcev bo sled prašnih delcev, ki se oddajajo z igralčevega hrbta, ko igralec začne premikanje z uporabo miške ali tipkovnice. Poleg tega se smer prašnih delcev spremeni, ko igralec spremeni smer.

Določite a delec razred, ki predstavlja posamezen delec. Vsak delec ima začetni položaj (x in l), naključna hitrost (dx in dy) in življenjsko dobo, ki določa, kako dolgo bo delec obstajal.

Določite tudi a ParticleSystem razred, ki upravlja zbirko delcev. V sistem lahko dodate nov delec z uporabo add_particle() metoda. The nadgradnja() metoda posodobi vse delce v sistemu in odstrani delce, ki so dosegli konec svoje življenjske dobe.

# Razred delcev
razreddelec:
def__v__(jaz, x, y):
sam.x = x
self.y = y
self.dx = random.uniform(-1, 1)
self.dy = random.uniform(-1, 1)
self.lifetime = 60

defnadgradnja(sebe):
self.x += self.dx
self.y += self.dy
samo.življenjska doba -= 1

defpripraviti(jaz, okno):
barva = (200, 200, 200)
položaj = (int (self.x), int (self.y))
pygame.draw.circle (okno, barva, položaj, 2)

# Razred sistema delcev
razredParticleSystem:
def__v__(sebe):
self.particles = []

defadd_particle(jaz, x, y):
self.particles.append (delec (x, y))

defnadgradnja(sebe):
za delec v self.delci:
particle.update()

če particle.lifetime <= 0:
self.particles.remove (delec)

defpripraviti(jaz, okno):
za delec v self.delci:
particle.draw (okno)

Če želite integrirati sistem delcev v svojo igro, morate narediti nekaj sprememb v glavni igralni zanki. Ustvari novo datoteko z imenom gibalni delci.py in dodajte kodo s spodnjimi posodobitvami:

# Ustvarite sistem delcev
particle_system = ParticleSystem()

# Glavna igralna zanka
tek = Prav
ura = pygame.time. ura()

medtem teče:
dt = clock.tick(60) / 1000.0

za dogodek v pygame.event.get():
če event.type == pygame. PRENEHATI:
tek = False

delec_y = igralec_y + višina_igralca // 2
particle_x = player_x + player_width

tipke = pygame.key.get_pressed()
meja = igralec_x < širina_okna - širina_igralca

če ključi [pygame. K_LEFT] in igralec_x > 0:
igralec_x -= 5
particle_system.add_particle (particle_x, particle_y)

če ključi [pygame. K_DESNO] in meja:
igralec_x += 5
particle_system.add_particle (player_x, particle_y)

particle_system.update()

window.fill (ČRNA)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (okno, BELO, player_pos)
particle_system.draw (okno)

pygame.display.flip()

# Zapustite igro
pygame.quit()

Ko zdaj premaknete predmet igralca, bi morali videti delce, ki poudarjajo gibanje:

Učinek eksplozije

Naslednji učinek delcev bo učinek eksplozije, ki se pojavi, ko igralec izstreli naboj. Učinek udarca bo sestavljen iz rdeče obarvanih delcev, ki jih oddaja položaj krogle.

Določite a delec razred podoben prejšnjemu, vendar tokrat vključuje a barva parameter za predstavitev barve delca.

Prav tako posodobite ParticleSystem razred za obravnavo nove vrste delcev. The add_particle() metoda zdaj zahteva dodatno barva parameter in ustvari delce z določeno barvo.

# Razred delcev
razreddelec:
def__v__(jaz, x, y, barva):
sam.x = x
self.y = y
self.dx = random.uniform(-2, 2)
self.dy = random.uniform(-2, 2)
self.lifetime = 30
self.color = barva

defnadgradnja(sebe):
self.x += self.dx
self.y += self.dy
samo.življenjska doba -= 1

defpripraviti(jaz, okno):
položaj = (int (self.x), int (self.y))
pygame.draw.circle (okno, self.color, položaj, 3)

# Razred sistema delcev
razredParticleSystem:
def__v__(sebe):
self.particles = []

defadd_particle(jaz, x, y, barva):
self.particles.append (delec (x, y, barva)

defnadgradnja(sebe):
za delec v self.delci:
particle.update()

če particle.lifetime <= 0:
self.particles.remove (delec)

defpripraviti(jaz, okno):
za delec v self.delci:
particle.draw (okno)

Če želite integrirati učinek eksplozije v svojo igro, morate narediti nekaj sprememb v glavni igralni zanki. Ustvari novo ime datoteke shoot-particle.py in dodajte kodo s spodnjimi posodobitvami:

# Ustvarite sistem delcev
particle_system = ParticleSystem()

# Glavna igralna zanka
tek = Prav
ura = pygame.time. ura()

medtem teče:
dt = clock.tick(60) / 1000.0

za dogodek v pygame.event.get():
če event.type == pygame. PRENEHATI:
tek = False

tipke = pygame.key.get_pressed()
meja = igralec_x < širina_okna - širina_igralca

če ključi [pygame. K_LEFT] in igralec_x > 0:
igralec_x -= 5

če ključi [pygame. K_DESNO] in meja:
igralec_x += 5

če ključi [pygame. K_SPACE]:
bullet_x = player_x + player_width // 2
bullet_y = igralec_y
particle_system.add_particle (bullet_x, bullet_y, RDEČA)

particle_system.update()

window.fill (ČRNA)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (okno, BELO, player_pos)
particle_system.draw (okno)

pygame.display.flip()

# Zapustite igro
pygame.quit()

Tukaj je rezultat:

Ko preslednica ( pygame. K_SPACE) pritisnete, dodate delec v sistem delcev na mestu krogle. To ustvari učinek pihanja z rdečimi delci.

Učinek prahu

Končna vizualna izboljšava, ki jo lahko uvedete, je učinek prašnega ozadja. Učinek prahu bo sestavljen iz majhnih sivih delcev, ki se premikajo v krožnem vzorcu in ustvarjajo dinamično in prašno ozadje.

Posodobite delec razred vključiti an kota in hitrost za vsak delec. Kot določa smer gibanja, hitrost pa nadzoruje, kako hitro se delci premikajo v svojem krožnem vzorcu. Spremenite nadgradnja() metoda za posodobitev položaja vsakega delca glede na njegov kot in hitrost.

Prav tako posodobite ParticleSystem razred za obravnavo novega obnašanja delcev. Delci se zdaj premikajo v krožnem vzorcu v oknu igre.

# Razred delcev
razreddelec:
def__v__(jaz, x, y, polmer):
sam.x = x
self.y = y
self.radius = polmer
self.angle = random.uniform(0, 2 * math.pi)
self.speed = random.uniform(0.5, 1.5)

defnadgradnja(sebe):
samo.kot += 0.02
self.x += math.cos (self.angle) * self.speed
self.y += math.sin (self.angle) * self.speed

če jaz.x < 0:
self.x = širina_okna
elif self.x > window_width:
sam.x = 0

če self.y < 0:
self.y = višina_okna
elif self.y > window_height:
self.y = 0

defpripraviti(jaz, okno):
barva = (128, 128, 128)
pos = (int (self.x), int (self.y))
radius = int (self.radius)
pygame.draw.circle (okno, barva, položaj, polmer)

# Razred sistema delcev
razredParticleSystem:
def__v__(sebe):
self.particles = []

defadd_particle(jaz, x, y, polmer):
self.particles.append (delec (x, y, polmer))

defnadgradnja(sebe):
za delec v self.delci:
particle.update()

defpripraviti(jaz, okno):
za delec v self.delci:
particle.draw (okno)

Če želite integrirati učinek prahu v svojo igro, morate narediti nekaj sprememb v glavni igralni zanki. Ustvari novo datoteko z imenom prašni delci.py in dodajte kodo s spodnjimi posodobitvami:

# Ustvarite sistem delcev za učinek prahu
particle_system = ParticleSystem()

# Glavna igralna zanka
tek = Prav
ura = pygame.time. ura()

medtem teče:
dt = clock.tick(60) / 1000.0

za dogodek v pygame.event.get():
če event.type == pygame. PRENEHATI:
tek = False

particle_x = naključno.randint(0, širina_okna)
delec_y = naključno.randint(0, višina_okna)

particle_system.add_particle (particle_x, particle_y, 1)

particle_system.update()

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

pygame.display.flip()

# Zapustite igro
pygame.quit()

Dodajte delce naključno po oknu igre z uporabo random.randint() funkcijo. Vsak delec ima začetni polmer 1. Posodobite in narišite sistem delcev v oknu igre ter ustvarite dinamičen in prašen učinek ozadja.

Na zaslonu bi morali videti veliko delcev, ki se premikajo naključno, a gladko:

Najboljše prakse za posebne učinke

Ko svoji igri Pygame dodajate posebne učinke, upoštevajte naslednje najboljše prakse:

Optimizacija zmogljivosti

Sistemi delcev lahko vključujejo veliko število delcev, kar lahko vpliva na uspešnost igre. Izvedite tehnike, kot je prostorska particija (npr. Quadtree), da optimizirate posodobitve in risanje delcev.

Recikliranje delcev

Namesto ustvarjanja in uničevanja delcev v vsakem okviru, razmislite o ponovni uporabi delcev tako, da ponastavite njihove lastnosti, ko dosežejo konec svoje življenjske dobe. To pomaga zmanjšati dodeljevanje in sprostitev pomnilnika.

Združevanje delcev

Ohranite skupino vnaprej dodeljenih delcev, da se izognete dodatnim stroškim ustvarjanja novih primerkov med izvajanjem. To lahko izboljša zmogljivost in zmanjša razdrobljenost pomnilnika.

Omejitev števila delcev

Če želite preprečiti, da bi sistemi delcev preplavili igralni zaslon, nastavite omejitve za največje število delcev in odstranite delce, ko dosežejo to mejo. To zagotavlja, da učinki ostanejo vizualno privlačni, ne da bi ovirali igranje.

Vizualna doslednost

V celotni igri ohranite dosleden vizualni slog, vključno z učinki delcev. Zagotovite, da so barve, velikosti in vzorci gibanja delcev skladni s splošno temo in umetniškim slogom.

Zvočni učinki

Dodajte zvočne učinke za dopolnitev vaših učinkov delcev. Predvajajte na primer zvoke eksplozije, ko se pojavi učinek eksplozije, ali zvoke okolice, ko so aktivni učinki megle ali prahu.

Naredite igre bolj zabavne s posebnimi učinki

Dodajanje posebnih učinkov, kot so sistemi delcev, vašim igram Pygame lahko močno izboljša igralsko izkušnjo in naredi vaše igre bolj privlačne in zabavne za igralce. Z uvedbo učinkov delcev, kot so sledi, eksplozije, megla in prah, lahko ustvarite vizualno osupljiva in dinamična okolja.

Ne pozabite razmisliti o optimizaciji delovanja, recikliranju delcev in vizualni doslednosti, medtem ko v svoje igre vključujete posebne učinke. Z ustvarjalnostjo in eksperimentiranjem lahko svoje igre Pygame dvignete na višjo raven in očarate igralce s poglobljenimi in razburljivimi izkušnjami.