effect (function, var number, VECTOR* pos, VECTOR* vel)

effect_local (function, var number, VECTOR* pos, VECTOR* vel)

effect_layer (function, var number, VECTOR* pos, VECTOR* vel)

Mithilfe dieser Anweisung läßt sich ein Schwarm kleiner, sich bewegender Bitmap-Partikel erstellen, etwa um einen Raketenschweif, Explosionen, Laserstrahlen, Photonentorpedos, Regen, Schneestürme, Tornados oder ähnliches darzustellen. Der Vektor pos gibt dabei die Startposition des Schwarmes an, number die Anzahl der Partikel, der Vektor vel entweder Ausgangsgeschwindigkeit oder ursprüngliche Länge eines Strahls, und function definiert das Verhalten eines jeden Partikels. Die Funktion muss vorher definiert sein. Sie wird während der Lebensdauer jedes einzelnen Partikels permanent aufgerufen und kann durch einen my-Pointer die Position, Geschwindigkeit, Farbe, Größe und Bitmap des Partikels wie bei einer normalen Entity verändern. Es können sogar neue 'Kinder-'Partikel kreiert werden. Auf diese Weise lassen sich Partikel für alle denkbaren Effekte verwenden.

   
     
Partikel-Effekt
Beam-Effekt

Parameter:

function Partikelfunktion, läuft mit jedem Frame
number Anzahl der zu erstellenden Partikel
pos Position des Partikelemitters
vel Vektor der Ausgangsgeschwindigkeit oder Strahlenlänge

Bemerkungen:

Geschwindigkeit:

Schnell

Demo (lite-C):

// helper function: sets the vector to random direction and length
function vec_randomize (VECTOR* vec, var range)
{
   vec_set(vec,vector(random(1)-0.5,random(1)-0.5,random(1)-0.5));
   vec_normalize(vec,random(range));
}

// helper function: fades out a particle
function p_alphafade(PARTICLE *p)
{
    p.alpha -= p.skill_a*time_step;
    if (p.alpha <= 0) p.lifespan = 0;
}

function p_fountain(PARTICLE* p)
{
   VECTOR vTemp;
   vec_randomize(vTemp,2);
   vec_add(p.vel_x,vTemp);
   vec_set(p.blue,vector(random(255),random(255),255));
   set(p, MOVE | BRIGHT | TRANSLUCENT);
   p.alpha = 100;
   p.size = 2;
   p.gravity = 0.2;
   p.skill_a = 3; // fade factor
   p.event = p_alphafade;
}

function main()
{
  level_load(NULL);
  video_window(NULL,NULL,0,"Particle demo");
  vec_set(camera.x,vector(-150,0,50));
  vec_set(sky_color,vector(50,0,0)); // dark blue

  while(1)
  {
     effect(p_fountain,maxv(1,40*time_step),vector(0,0,0),vector(0,0,5));
     wait(1);
  }
}

Siehe auch:

lifespan, vel_x, gravity, size, alpha, bmap, event, skills, MOVE, BEAM, ent_decal, particles.c

► Aktuelle Version Online