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 long    timestampLastExplosion = 0;
    private Vector3 position = new Vector3(0f, 0f, 0f);
    private Vector4 color = new Vector4(1f, 1f, 0f, 1f); // RGB und Intensität

    public override void Act(KeyboardState ks, MouseState ms)
    {
        long timestampNow = GetCurrentTimeInMilliseconds();
        
        if(timestampNow - timestampLastExplosion >= 3000)
        {
            Explosion ex = new Explosion(
                position,           // wo ist das Zentrum der Explosion?
                64,                 // Anzahl der Partikel (max.: 1024)
                0.5f,               // Größe je Partikel
                5.0f,               // Explosionsradius
                2.0f,               // Dauer der Explosion (in Sekunden)
                ExplosionType.Star, // 3D-Modell der Partikel
                color               // Farbe der Partikel
            );

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

            // Füge das Explosionsobjekt der Welt hinzu:
            AddGameObject(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 long    timestampLastParticle = 0;
    private Vector3 position = new Vector3(0f, 0f, 0f);
    private Vector4 color = new Vector4(1f, 1f, 0f, 1f); // RGB und Intensität

    public override void Act(KeyboardState ks, MouseState ms)
    {
        long timestampNow = GetCurrentTimeInMilliseconds();
        
        if(timestampNow - timestampLastParticle >= 3000)
        {
            ParticleObject po = new ParticleObject(
                0f,                         // x-Position
                0f,                         // y-Position
                0f,                         // z-Position
                2f,                         // Skalierung (Größe)
                ParticleType.BurstFirework1 // Aussehen des Effekts
            );

            // 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 Intensität)
            po.SetColor(1f, 1f, 1f, 1f);

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

            // Aktualisiere den Zeitstempel des letzten Effekts
            // mit dem aktuellen Zeitwert:
            timestampLastParticle = timestampNow;
        }
    }

    public override void Prepare()
    {

    }
}
Beispiel-GIF:

Schreibe einen Kommentar

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