Partendo da una classe di And80 ho creato questo codice che maschera e smaschera un clip. Funziona, il problema però è che se faccio un ciclo su 10 clip, sembra che la classe vanga applicata solo all'ultimo, mentre gli altri sono subito smascherati.

Evidentemente rilanciando la classe si sovrascrivere qualcosa fatto in precedenza, qualcuo ha idea di cosa può essere?

Ah, la classe fa uso di TweenLite, una classe gratuita per gli effetti di transizione, basta googlare per trovare il sito.

Codice PHP:
import mx.transitions.easing.*;
import gs.TweenLite;

class 
MascheraSlide {
    private var 
__target:MovieClip;
    private var 
__verso:String;    
    private var 
__width:Number;
    private var 
__height:Number;
    private var 
__time:Number;
    private var 
__easeType:Function;
    private var 
__intv:Number;
    private var 
__inOut:String;
    private var 
__delay:Number;
    private var 
path:MovieClip;    
    private var 
trgRef:MovieClip;
    
    
    public var 
onMotionFinished:Function;    
    
    function 
MascheraSlide(target:MovieClipverso:StringinOut:StringeaseType:Function, duration:Numberdelay:Number) {
        var 
path this;
        if (
inOut==undefined){__inOut="in"}else{__inOut=inOut}        
        if (
target != undefined) {            
            
path['endOff'](__target);            

            
__target target;
            if (
verso==undefined){
                
__verso "left"
            
}else{
                
__verso verso;
            }
            
__easeType easeType;
            if (
duration==undefined){
                
__time 1;
            }else{
                
__time duration;
            }
            if (
delay==undefined){
                
__delay=0;
            }else{
                
__delay=delay;
            }
            
trgRef=target;
            
drawMask(__target__verso__inOut__easeType__time__delaypath)            
        }else{
            
path['endOff'](__target__inOut);            
        }
    }
    private function 
drawSquare(target:MovieClipname:Stringlevel:Numberwdt:Numberhgt:Number):MovieClip {
        var 
rt:MovieClip=target.createEmptyMovieClip(namelevel);
        
rt.lineStyle(000);
        
rt.moveTo(00);
        
rt.beginFill(0);
        
rt.lineTo(wdt0);
        
rt.lineTo(wdthgt);
        
rt.lineTo(0hgt);
        
rt.lineTo(00);
        
rt.endFill();
        return 
rt;
        
    }
//    private function drawMask(target:MovieClip, verso:String,inOut:String, easeType:Function, duration:Number, delay:Number, path:MovieClip) {
    
private function drawMask(target:MovieClipverso:String,inOut:StringeaseType:Function, duration:Numberdelay:Number) {    

        
/*if (target._parent["cmask_"+target._name]==undefined){
            drawSquare(target._parent, "cmask_"+target._name, target._parent.getNextHighestDepth(), target._width, target._height);
            target.setMask(target._parent["cmask_"+target._name]);
        }else{
            TweenLite.removeTween(target._parent["cmask_"+target._name].miaTween);
        }*/
        
        
drawSquare(target._parent"cmask_"+target._nametarget._parent.getNextHighestDepth(), target._widthtarget._height);
        
        
target.setMask(target._parent["cmask_"+target._name]);        
        
target._parent["cmask_"+target._name]._x target._x;
        
target._parent["cmask_"+target._name]._y target._y;

        var 
path:Object=this;        
        
target["objTween"] = new Object();
        
target["objTween"].onComplete chiudi;
        
target["objTween"].ease easeType;
        
target["objTween"].onCompleteParams = [targetpathinOut];
        
target["objTween"].delay delay;
        switch (
verso){
            case 
"left":
                
target["objTween"]._xscale=0;
                break;
            case 
"top":
                
target["objTween"]._yscale=0;
                break;
            case 
"right":
                
target["objTween"]._xscale=0;
                
target["objTween"]._x target._width+target._x;
                break;
            case 
"bottom":
                
target["objTween"]._yscale=0;
                
path["objTween"]._y target._height+target._y;
                
target;                
            default:
                
target["objTween"]._xscale=0;            
        }
        if (
inOut=="in"){
            
//target._visible=true;
            
path['animateMask'](targetduration"from")
            
//target._parent["cmask_"+target._name].miaTween = TweenLite.from(target._parent["cmask_"+target._name], duration, path.objTween);
        
}else{
            
path['animateMask'](targetduration"to")
            
//target._parent["cmask_"+target._name].miaTween = TweenLite.to(target._parent["cmask_"+target._name], duration, path.objTween);
        
}
    }
    
    private function 
animateMask(trgdurtipo){
        if (
tipo=="from"){
            
trg._visible=true;            
            
trg._parent["cmask_"+trg._name].miaTween TweenLite.from(trg._parent["cmask_"+trg._name], durtrg.objTween);
        }else{
            
trg._parent["cmask_"+trg._name].miaTween TweenLite.to(trg._parent["cmask_"+trg._name], durtrg.objTween);
        }
        
//var path = this;
    
}

    private function 
chiudi(targetpathinOut){
        
path['endOff'](targetinOut);
    }
    private function 
endOff(target:MovieClipinOut:String) {
        
target.setMask(null);
        if (
inOut!="in"){
            
target._visible=false;
        }
        if (
target._parent["cmask_"+target._name]!=undefined){
            
target._parent["cmask_"+target._name].removeMovieClip();
        }
        
this['onMotionFinished']();
    }
    public function 
getMask():MovieClip{
        
//return target._parent["cmask_"+target._name]
        
return trgRef._parent["cmask_"+trgRef._name]
    }