Game Engine Math

KWEngine, Teil 17: Explosionen und Partikeleffekte

KWEngine bietet eine Reihe vorgefertigter Explosions- und Partikeleffekte, mit deren Hilfe eine Spielszene mit zusätzlichen Informationen angereichert werden kann.

Explosionen

Explosionen haben in KWEngine eine eigene Klasse und können (ähnlich einer GameObject-Instanz) den Welten hinzugefügt werden. Im Gegensatz zu normalen GameObject-Instanzen entfernen sich die Explosionsobjekte jedoch selbständig aus ihren Welten, wenn der Explosionseffekt abgespielt wurde. Explosionseffekte haben keine Auswirkungen auf das Spielgeschehen und sind demnach eine rein optische Ergänzung.

Im folgenden Beispiel wird alle 3 Sekunden ein Explosionseffekt in der Mitte der Spielwelt erzeugt:

public class ExplosionWorld : World
{
    private float   _timestampLastExplosion = 0f;
    private Vector3 _position = new Vector3(0f, 0f, 0f);
    private Vector4 _color = new Vector4(1f, 1f, 0f, 3f); // RGB und Intensität

    public override void Act()
    {
        float timestampNow = WorldTime;
        
        if(timestampNow - _timestampLastExplosion >= 3f)
        {
            ExplosionObject ex = new ExplosionObject(
                64,                 // Anzahl der Partikel (max.: 1024)
                0.5f,               // Größe je Partikel
                5.0f,               // Explosionsradius
                2.0f,               // Dauer der Explosion (in Sekunden)
                ExplosionType.Star, // Explosionstyp (Modell)
            );
            ex.SetPosition(_position);

            // Optionale Anpassung der Partikelbewegungen:
            ex.SetAnimationAlgorithm(ExplosionAnimation.Spread); 

            // Setze die Leuchtfarbe der Explosionspartikel:
            ex.SetColorEmissive(_color.X, _color.Y, _color.Z, _color.W);

            // Füge das Explosionsobjekt der Welt hinzu:
            AddExplosionObject(ex);

            // Aktualisiere den Zeitstempel der letzten Explosion
            // mit dem aktuellen Zeitwert:
            _timestampLastExplosion = timestampNow;
        }
    }

    public override void Prepare()
    {

    }
}

Partikeleffekte

Partikeleffekte sind in KWEngine keine 3D-Objekte. Um auch auf langsameren PCs bzw. Grafikkarten lauffähig zu sein, wurden die Partikeleffekte auf kleine 2D-Videos beschränkt. Wird ein Effekt abgespielt, wird das Video immer so ausgerichtet, dass es sich direkt zur Kamera dreht.

public class ParticleWorld : World
{
    private float   _timestampLastParticle = 0f;
    private Vector3 _position = new Vector3(0f, 0f, 0f);
    private Vector4 _color = new Vector4(1f, 1f, 0f, 1f); // RGB und Alpha

    public override void Act()
    {
        if(WorldTime - _timestampLastParticle >= 3)
        {
            ParticleObject po = new ParticleObject(
                2f,                         // Skalierung (Größe)
                ParticleType.BurstFirework1 // Aussehen des Effekts
            );

            po.SetPosition(_position);

            // Optional: 
            // Änderung der Dauer eines Effekts (in Sekunden)
            // [gilt nur für Objekte mit ParticleType 'loop']
            po.SetDuration(2f);

            // Optional: Einfärben des Effekts (RGB und Alpha)
            po.SetColor(_color.X, _color.Y, _color.Z, _color.W);

            // Füge der Welt den Effekt hinzu:
            AddParticleObject(po);

            // Aktualisiere den Zeitstempel des letzten Effekts
            // mit dem aktuellen Zeitwert:
            _timestampLastParticle = WorldTime;
        }
    }

    public override void Prepare()
    {

    }
}
Beispiel-GIF:

Beitrag veröffentlicht

in

von

Schlagwörter:

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.