Hallo zusammen!
Ich habe heftige Probleme mit Partikeln. In C-Skript hatte ich nie Probleme, aber in Lite-C bekomme ich es irgendwie nicht mehr hin. Hier mal drei Partikel-Effekte:
BMAP* laser_bmap = "laser.tga";
BMAP* laserflare_bmap = "laserflare.tga";
BMAP* laserfunke_bmap = "laserfunke.tga";
function laser_effekt(PARTICLE *p)
{
p.size = 4;
p.lifespan = 0.1;
p.bmap = laser_bmap;
p.flags = (BRIGHT | STREAK);
p.flags &= ~MOVE;
}
function laserflare_effekt(PARTICLE *p)
{
p.size = 10;
p.alpha = 50;
p.lifespan = 0.1;
p.bmap = laserflare_bmap;
p.flags = (BRIGHT);
p.flags &= ~MOVE;
}
function laserfunken_partikel_funktion(PARTICLE *p)
{
p.alpha -= 2*time_step;
if (p.alpha <= 0) p.lifespan = 0;
}
function laserfunken_effekt(PARTICLE *p)
{
p.size = 4;
p.alpha = 50;
p.gravity = 10;
p.bmap = laserfunke_bmap;
p.vel_x = random(2)-random(2);
p.vel_y = random(2)-random(2);
p.vel_z = random(2)+2;
p.flags = (BRIGHT | MOVE |STREAK);
p.event = laserfunken_partikel_funktion; // wechsle zu einer kürzeren, schnelleren Funktion
}Alle bitmaps sind 32bit TGA mit Alpha Channel.
Zum ersten Effek: laser_effekt
Dieser soll einen Laserstrahl von vec1 zu vec2 darstellen.
Er wird aufgerufen mit "effect(laser_effekt, 1, vec1, vec2);"
Im Grunde funktioniert es auch, der Partikel wird aber über vec2 hinaus gedehnt. Der Strahl geht also praktisch durch sein Ziel hindurch.
Zum zweiten Effek: laserflare_effekt
Dieser soll eine leuchtende Bitmap an Position pos_vec darstellen.
Er wird aufgerufen mit "effect(laserflare_effekt, 1, pos_vec, nullvector);"
Dies funktioniert nur, wenn p.size auf extrem große Werte (z.B. 80) gesetzt und BRIGHT nicht gesetzt wird. Die Größe entspricht allerdings bei Weitem nicht 80 Quants und die Bitmap wird natürlich nich "leuchtend" dargestellt. Ist BRIGHT gesetzt, wird sie nicht dargestellt.
Zum dritten Effek: laserfunken_effekt
Dieser soll Funken an der position target aussprühen, die langsam verblassen und außerdem zu Boden fallen.
Er wird aufgerufen mit "effect(laserfunken_effekt, 1, target, nullvector);"
Hier liegt das Problem darin, dass die Partikel die Funktion laserfunken_partikel_funktion scheinbar nicht nutzen, da sie nicht verblassen und auch nicht verschwinden. Außerdem hat p.gravity keinen Effekt. Sie bewegen sich immer weiter in die selbe Richtung.
Woran liegen diese Probleme denn? Ich kapier es einfach nicht. Bin für jede Hilfe sehr dankbar!!!
Gruß
derGarv