Máscara dinámica y OOP
Intenté crear una clase que cargara un movieclip y que le ap licara como máscara uno que ya hay en escena, para ello escribí la siguiente clase:
<code>
class mascara{
var swf:MovieClip;
var msk:MovieClip;
public function mascara(m:MovieClip){
msk=m;
swf = _root.createEmptyMovieClip("swf",_root.getNextHighestDepth());
swf.loadMovie("test.swf");
swf.setMask(msk);
}
}</code>
Después cree un MovieClip en la escena al que llamé "b", y añadí el siguiente código en el primer y unico frame de dicha escena.
var a:mascara = new mascara(b);
Como era de suponer, se crea un nuevo objeto llamado "swf" y en el se carga el archivo "test.swf", pero la máscara no se le aplica.
¿Alguna idea?
jakobuslandson
Zárate tenia razón, hay que esperar a que cargue el mc antes de aplicarle la mascara. Al final el código quedo tal que asi:
<code>
iimport mx.utils.Delegate;
class mascara {
var swf:MovieClip;
var msk:MovieClip;
public function mascara(m:MovieClip) {
msk = m;
swf = _root.createEmptyMovieClip("swf", _root.getNextHighestDepth());
var mcl = new MovieClipLoader();
var listener = new Object();
mcl.addListener(listener);
mcl.onLoadInit = Delegate.create(this, onLoadInit);
mcl.loadClip("test.swf", swf);
}
private function onLoadInit() {
swf.setMask(msk);
}
}
</code>
Por cierto, hasta ahora usaba un clip como punto de carga como dice ozke, pero usarlo hace que el usuario de la clase necesite conocer más detalles de como funciona esta de los que son estrictamente necesarios, o dicho de forma pedante, aumentaría el acoplamiento. De ahi todo este embrollo.
Gracias!
ozke
Pq no crear un clip q sirva de punto de carga dentro del clip al cual quieres enmascarar?
juandelgado
Yo diria que no puedes aplicar una mascara a un mc cargado dinamicamente hasta que no ha terminado de cargar. Es decir, necesitaras un preloader.
Ya diras.
Bye!