Tutorials

Andorra 2D Tutorials
Partikel Systeme


Was sind Partikelsysteme?
Oftmals möchte man in seinem Spiel graphische Effekte wie z.B. Explosionen und Zauber darstellen.
Dazu verwendet man oftmals so genannte "Partikelsysteme". Wie der Name schon sagt, bestehen Partikelsysteme aus einzelnen "Partikeln". Diese wiederum bestehen meistens aus einem eher unspektaktulär aussehendem Bild, das sich in eine bestimmte Richtung bewegt und nach einiger Zeit wieder verschwindet:

Hat man nun mehrere dieser "Partikel" so ergibt sich der entsprechende Effekt:

Das Partikelsystem kümmert sich also um die Partikel und deren Bewegungen.

Partikelsysteme in Andorra 2D

Das Laden von Partikeln
In Andorra 2D gibt es nun die Klasse "TAdParticleSystem" aus der Unit "AdParticles".
Die Klasse erwartet im Konstruktor einen Parameter des Typs "TAdDraw", der die Oberfläche spezifiziert auf der die Ausgabe stattfinden soll.
Um nun Partikel zu erzeugen muss dem Partikelsystem ersteinmal das Bild des Partikels zugewiesen werden.
Dies geschieht durch folgenden Code:

Delphi-Code:
//Erzeugen des Partikelsystems
partsys := TAdParticleSystem.Create(AdDraw);
//Zuweisen des Bildes
partsys.Texture := AdImageList.Items[0].Texture;

Damit die Ausgabe bestmöglich aussieht achten Sie darauf, das der Partikel einen Alphachannel besitzt. Verwenden Sie zum Beispiel dieses Bild (denken Sie daran, dass Sie zum Laden von PNGs die Unit AdPng einbinden müssen und sich auch die Bibliothek PNGDelphi im Suchpfad befinden muss).

Nun wären wir eigentlich schon fast fertig. Fügen Sie Ihrer Renderroutine die folgende Zeile hinzu:

Delphi-Code:
partsys.Emit(1, 0, 0);

Diese Zeile fügt dem Partikelsystem einen neuen Partikel an der Position 0, 0 hinzu. Das Partikelsystem enthält ein eigenes Koordinatensystem in dem sich die Partikel bewegen. Wir erzeugen unseren neuen Partikel am Koordinatenursprung.

Nun müssen wir dem Partikelsystem nur noch sagen, dass es seine Partikel bewegen und zeichnen soll. Dies geschieht über folgende Zeilen:

Delphi-Code:
PartSys.Move(AdPerCounter.TimeGap / 1000);
partsys.Draw(bmAdd, AdDraw.DisplayRect.Right / 2, AdDraw.DisplayRect.Bottom / 2);

Der Koordinatenursprung des Koordinatensystems wird hierbei temporär auf die Bildschirmmitte verschoben, sodass auch neue Partikel dort erscheinen.
Vergessen Sie nicht das Partikelsystem am ende wieder frei zu geben und führen Sie das Programm aus:

Wenn Sie den Sourcecode habe möchten, schauen Sie sich mal die Demo "demos\Particles\Simple\simplepart" an. Oder schauen Sie einfach hier: http://andorra.cvs.sourceforge.net/andorra/andorra/demos/Particles/Simple/Main.pas?view=markup#l_1

Das Verhalten von Partikeln
Wie Sie gesehen haben, haben die Partikel schon ein Standardverhalten. Doch woher kommt dieses?
Dazu schauen wir uns die Funktionsweise der "Emit" Funktion des Partikelsystems einmal genauer an:

Dabei wird zu beginn die spezifizierte Menge an Partikeln erzeugt, die ihre Eigenschaften von einem "DefaultParticle" des Particlesystems übernehmen. Dann wird die Funktion "Setupmovement" jedes einzelnen Partikels aufgefrufen in der ein Bewegungsvektor generiert wird.
Um also das gesamte aussehen des Partikelsystems zu verändern, müssen Sie nur die Eigenschaften des "DefaultParticle" anpassen. Um zu Beispiel die Lebenszeit der Parikel anzupassen, schreiben Sie:

Delphi-Code:
PartSys.DefaultParticle.LifeTime := 2; //Angabe in Sekunden

Sie können die Eigenschaften der Partikel mit dem komfortablen Partikel Editor (parted.exe) anpassen. Spielen Sie einfach ein wenig damit herum. Dort können Sie die Partikel auch in eine Datei schreiben und mit

Delphi-Code:
PartSys.DefaultParticle.LoadFromFile('particle.apf');

wieder hereinladen. Beachten Sie, das das Bild, welches Sie im Partikeleditor hereingeladen haben nicht in der Datei gespeichert wird!

Das war eigentlich schon alles was es zum Thema Partikel zu sagen gibt.

Eigene Partikelklassen
Wenn Sie zum Beispiel Partikel mit chaotischem Bewegungsmuster erzeugen wollen, können Sie sich eine eigene Partikelklasse ableiten, die Sie dann dem Partikelsystem durch zuweisen des "DefaultParticles" übergeben können. Schauen sie sich hierzu am besten den Sourcecode der "TAdStdParticle" bzw. der "TAdBillboardParticle" Klasse an. Am einfachsten ist es, ihre eigene Partikelklasse von diesen Abzuleiten.

Partikel in der Spriteengine
Um Partikelsysteme in der Spriteengine verwenden zu können gibt es die Klasse "TParticleSprite". Diese besitzt ein eigenes Partikelsystem. Außerdem können Sie einstellen, wie viele Partikel in der Sekunde erzeugt werden sollen.
Dies ist aber nochmal ein eigenes Kapitel und wird dann in den SpriteEngine Tutorials gesondert beschrieben.

Copyright und Lizenz
(c) by Andreas Stöckel Februar 2007

Der Inhalt dieses Tutorials steht unter der GNU Lizenz für freie Dokumentation.


This page was generated with the help of the following PHP-Scripts: GeSHi a free PHP Syntax highlighter and StringParser_BBCode a free BBCode Parser.