Originariamente inviato da and80
ok, adesso è chiaro... il riflesso non viene aggiunto nello stage, ma direttamente sull'oggetto che deve riflettere, ossia su mc1, mc2 ecc...
perciò se ad esempio devi cancellare rifl1, devi farlo da mc1
mc1.removeChild(rifl1);
dovrebbe andare
No, la situazione è ancora diversa, in realtà il riflesso non è un elemento di visualizzazione come ci si aspetterebbe, è solo un "vettore" che crea gli oggetti che compongono la trasparenza, in pratica non è neanche necessario che estenda la classe MovieClip.
Ho modificato un po' quel codice e aggiunto la funzione "remove()" che elimina i clip che creano il riflesso dando l'idea che sia l'intero riflesso ad andarsene:
Codice PHP:
package {
import flash.display.MovieClip;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Matrix;
import flash.display.GradientType;
import flash.display.SpreadMethod;
public class rifletti {
private var T:MovieClip
private var W:Number;
private var H:Number;
private var D:BitmapData;
private var R:Bitmap;
private var B:MovieClip;
private var M:Matrix;
public function rifletti(mc:MovieClip, distanza:Number=0.0, colore:uint=0, influ:uint=255) {
T = mc;
H = T.height;
W = T.width;
D = new BitmapData(W, H, true, 0xFFFFFF);
D.draw(T);
R = new Bitmap(D);
R.scaleY = -1;
R.y = T.height * 2 + distanza;
R.name = "riflesso";
T.addChild(R);
B = new MovieClip();
M = new Matrix();
M.createGradientBox(W, H, (90/180)*Math.PI, 0, 0);
B.graphics.beginGradientFill(GradientType.LINEAR, [colore,colore], [0,1], [0,influ], M, SpreadMethod.PAD);
B.graphics.drawRect(0, 0, W, H);
B.y = R.y - R.height;
T.addChild(B);
}
public function remove () {
T.removeChild(R);
T.removeChild(B);
}
}
}
testato così:
Codice PHP:
var rifl:rifletti = new rifletti(mc, 10, 0, 100); // mc è un clip sullo stage
var t:Timer = new Timer(2000, 1);
t.addEventListener(TimerEvent.TIMER, function (e:TimerEvent) {r.remove()});
t.start();
dopo due secondi il riflesso scompare perchè viene richiamata la funzione remove()