Introducció

Els sistemes de partícules són una tècnica fonamental en la simulació de fenòmens naturals com el foc, la fum, la pluja, i altres efectes visuals en els videojocs. Aquest mòdul explorarà els conceptes bàsics dels sistemes de partícules, com es poden implementar i com es poden utilitzar per crear efectes realistes.

Conceptes Bàsics

Què és un Sistema de Partícules?

Un sistema de partícules és una col·lecció d'elements petits i independents (partícules) que es mouen i interactuen segons unes regles determinades per simular un fenomen complex.

Components d'un Sistema de Partícules

  1. Emissor de Partícules: El punt o àrea des d'on es generen les partícules.
  2. Partícules: Els elements individuals que constitueixen el sistema.
  3. Propietats de les Partícules: Inclouen la posició, velocitat, acceleració, vida útil, color, mida, etc.
  4. Actualització de les Partícules: Les regles que determinen com es mouen i canvien les partícules amb el temps.
  5. Renderització de les Partícules: Com es dibuixen les partícules a la pantalla.

Implementació d'un Sistema de Partícules

Creació d'un Emissor de Partícules

Un emissor de partícules és responsable de generar noves partícules. Pot ser un punt, una línia, una àrea o un volum.

class EmissorDeParticules:
    def __init__(self, posicio, taxa_emissio):
        self.posicio = posicio
        self.taxa_emissio = taxa_emissio
        self.particules = []

    def emetre(self):
        for _ in range(self.taxa_emissio):
            nova_particula = Particula(self.posicio)
            self.particules.append(nova_particula)

Definició de les Partícules

Les partícules tenen propietats com la posició, velocitat, acceleració i vida útil.

class Particula:
    def __init__(self, posicio):
        self.posicio = posicio
        self.velocitat = [0, 0]
        self.acceleracio = [0, 0]
        self.vida_util = 100  # en frames

    def actualitzar(self):
        self.velocitat[0] += self.acceleracio[0]
        self.velocitat[1] += self.acceleracio[1]
        self.posicio[0] += self.velocitat[0]
        self.posicio[1] += self.velocitat[1]
        self.vida_util -= 1

Actualització del Sistema de Partícules

El sistema de partícules s'actualitza en cada frame del joc. Això implica actualitzar la posició de cada partícula i eliminar les partícules que han esgotat la seva vida útil.

def actualitzar_sistema(emissor):
    for particula in emissor.particules:
        particula.actualitzar()
    emissor.particules = [p for p in emissor.particules si p.vida_util > 0]

Renderització de les Partícules

La renderització de les partícules depèn del motor de joc que s'utilitzi. A continuació es mostra un exemple simple utilitzant Pygame.

import pygame

def renderitzar_particules(screen, emissor):
    for particula in emissor.particules:
        pygame.draw.circle(screen, (255, 255, 255), (int(particula.posicio[0]), int(particula.posicio[1])), 3)

Exercicis Pràctics

Exercici 1: Crear un Emissor de Partícules

  1. Implementa un emissor de partícules que generi partícules en una posició fixa.
  2. Assigna una velocitat inicial aleatòria a cada partícula.

Exercici 2: Simular la Gravetat

  1. Afegeix una acceleració constant cap avall a cada partícula per simular la gravetat.
  2. Observa com canvia el moviment de les partícules.

Exercici 3: Efecte de Foc

  1. Modifica el color de les partícules per simular un efecte de foc.
  2. Fes que les partícules es facin més petites i es tornin més transparents a mesura que es mouen cap amunt.

Solucions als Exercicis

Solució Exercici 1

import random

class EmissorDeParticules:
    def __init__(self, posicio, taxa_emissio):
        self.posicio = posicio
        self.taxa_emissio = taxa_emissio
        self.particules = []

    def emetre(self):
        for _ in range(self.taxa_emissio):
            velocitat_inicial = [random.uniform(-1, 1), random.uniform(-1, 1)]
            nova_particula = Particula(self.posicio, velocitat_inicial)
            self.particules.append(nova_particula)

class Particula:
    def __init__(self, posicio, velocitat):
        self.posicio = posicio
        self.velocitat = velocitat
        self.acceleracio = [0, 0]
        self.vida_util = 100

    def actualitzar(self):
        self.velocitat[0] += self.acceleracio[0]
        self.velocitat[1] += self.acceleracio[1]
        self.posicio[0] += self.velocitat[0]
        self.posicio[1] += self.velocitat[1]
        self.vida_util -= 1

Solució Exercici 2

class Particula:
    def __init__(self, posicio, velocitat):
        self.posicio = posicio
        self.velocitat = velocitat
        self.acceleracio = [0, 0.1]  # Gravetat cap avall
        self.vida_util = 100

    def actualitzar(self):
        self.velocitat[0] += self.acceleracio[0]
        self.velocitat[1] += self.acceleracio[1]
        self.posicio[0] += self.velocitat[0]
        self.posicio[1] += self.velocitat[1]
        self.vida_util -= 1

Solució Exercici 3

class Particula:
    def __init__(self, posicio, velocitat):
        self.posicio = posicio
        self.velocitat = velocitat
        self.acceleracio = [0, -0.05]  # Moviment cap amunt
        self.vida_util = 100
        self.color = (255, 100, 0)  # Color inicial

    def actualitzar(self):
        self.velocitat[0] += self.acceleracio[0]
        self.velocitat[1] += self.acceleracio[1]
        self.posicio[0] += self.velocitat[0]
        self.posicio[1] += self.velocitat[1]
        self.vida_util -= 1
        # Canviar el color i la mida
        self.color = (255, int(100 * (self.vida_util / 100)), 0)
        self.mida = int(3 * (self.vida_util / 100))

def renderitzar_particules(screen, emissor):
    for particula in emissor.particules:
        pygame.draw.circle(screen, particula.color, (int(particula.posicio[0]), int(particula.posicio[1])), particula.mida)

Conclusió

Els sistemes de partícules són una eina poderosa per crear efectes visuals realistes en els videojocs. Comprendre els conceptes bàsics i saber com implementar-los permet als desenvolupadors simular una àmplia varietat de fenòmens naturals. Amb la pràctica, es poden crear efectes cada vegada més complexos i realistes.

© Copyright 2024. Tots els drets reservats