Partikel-Effekte programmieren ed
einzelne Partikel ed
allgemein ed
Ein Partikel ist ein (2D-) Bild, das in der 3D-Welt herumhängt und immer zur Kamera ausgerichtet ist.
Um das Verhalten eines Partikels festzulegen, kann eine Callback-Funktion beim Erschaffen mitgegeben werden, die regelmäßig ausgeführt wird.
Die Position (...->Pos) wird automatisch durch den aktuellen Wert der Geschwindigkeit (...->Vel) korregiert. Auch ...->TimeToLive zählt automatisch nach unten und sobald es negativ wird, wird das Partikel gelöscht.
Partikel ed
Der Variablen-Typ für ein einziges Partikel ist particle.
Erschaffen werden kann es mit CreateParticle, gelöscht mit XDelete
Beispiel:
// Callback-Funktion
void ParticleFunc( particle p )
{
// langsam transparenter werden lassen
p->Color.a -= p->elapsed / 4.0f;
// loeschen, wenn es nicht mehr sichtbar ist
// (waere nicht noetig, da es automatisch geloescht wird...)
if ( p->Color.a < 0 )
p->TimeToLive = -1;
}
void CreateSomeParticles()
{
vector pos = vector( 100, 100, 100 );
int tex = LoadTexture( "aaa.tga" );
// einmalig 10 Partikel in einer Reihe erstellen
int i = 0;
while( i < 10 ){
// erstellen
particle p = CreateParticle( pos, tex,
&ParticleFunc,
5, // lebt 5 sec
10); // 10 le Radius
// Start-Werte festlegen
p->Color = Green; // gruen faerben
p->Source = rect( 0, 1, 0, 0.5f ); // nur einen Ausschnitt der Textur nehmen
p->Vel = vector( 0, 100, 0 ); // mit 100 le/s nach oben fliegen lassen
pos.x += 10;
i ++;
}
}Weiterführend: Ein einfaches Partikel hängt in der Welt und hat immer die selbe Ausrichtung zur Kamera. Will man diese kontrollieren, muss es mit der Funktion CreateParticleRot erzeugt werden. Dadurch wird die Eigenschaft ...->Ang verwendbar.
Strahlen ed
Strahlen sind auch (2D-) Bilder, die in der 3D-Welt hängen, allerdings werden sie zwischen zwei Punkten im Raum gespannt. Sie eignen sich zum Beispiel für Laser-Strahlen.
Der Variablen-Typ für einen Strahl ist beam.
Erschaffen werden kann es mit CreateBeam, gelöscht mit XDelete
Beispiel:
void main()
{
vector pos = vector( 100, 100, 100 );
vector dir = vector( 1, 0, 0 );
// Erschaffen
beam b = CreateBeam( pos,
dir * 200, // Laenge = 200, Richtung = dir
LoadTexture( "aaa.jpg" ), // eine Textur eben
NULL, // keine Callback-Funktion
5, // lebt 5 sec
10 ); // Dicke = 10
b->Vel = dir * 1000; // Geschwindigkeit = 1000/s in Richtung dir
}Effekte ed
allgemein ed
Effekte sind unsichtbare Objekte, die dazu genutzt werden können, regelmäßig Partikel zu emittieren.
Der Variablentyp ist effect.
Sie werden mit CreateEffect erschaffen und mit XDelete gelöscht.