Comunidad de diseño web y desarrollo en internet online

Aplicar una máscara con setMask a Movieclips duplicados

Citar            
MensajeEscrito el 13 Mar 2009 09:59 am
Hola de nuevo!!

Mi cuestión ahora es la siguiente:

Estoy creando varios MC duplicándolos y ahora necesito aplicar a cada uno una máscara en forma de rectángulo (vertical) para representarlos de una forma determinada.

Éste es el código que estoy utilizando:

Código :

for ( e=0; e < 10; e++) {
            
duplicateMovieClip(MC, "MC"+e, this.getNextHighestDepth());

                //DUPLICO LOS MCs
      this["MC"+e].loadMovie(noticias_xml.firstChild.childNodes[_indice].childNodes[e].firstChild.nodeValue);
      this["MC"+e]._x = 10
      this["MC"]._x += this["MC"]._width
      
                //AQUI QUIERO ENMASCARARLOS ASIGNÁNDOLES SETMASK
      duplicateMovieClip(maskara, "maskara"+e, this.getNextHighestDepth());
      this["maskara"+e]._x = 10
      this["maskara"]._x += this["maskara"]._width
      this["MC"+e].setMask(this["maskara"+e])
                        
      }


Ayuditaaaaaa plizzzzz :P

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 14 Mar 2009 12:42 am
Hola, necesitas aplicarle a cada uno la mascara, o aplicar una mascara para todos, porque son cosas diferntes.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Mar 2009 10:30 am
Hola LongeVie,

Lo he probado asi pero nada:

this["MC"+i].setMask(mc_masc);

Que stoy haciendo mal?

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Mar 2009 11:59 am
Bueno, que es lo que pasa? no enmascara, no duplica, no se ve nada?

Intenta modificando tu codigo asi:

Código ActionScript :

var cargador:MovieClipLoader = new MovieClipLoader();
for ( var e:Number = 0; e < 10; e++) 
{
      var clip:MovieClip = duplicateMovieClip(MC, "MC"+e, this.getNextHighestDepth());
      clip.createEmptyMovieClip( "contenedor", 0 );
      cargador.loadClip( noticias_xml.firstChild.childNodes[_indice].childNodes[e].firstChild.nodeValue, clip.contenedor );
      //clip._x = 10; si dejas esta linea, seguramente todos los clips estaran sobrepuestos
      MC._x += MC._width;
      
      var msk:MovieClip = this.duplicateMovieClip(maskara, "maskara"+e, this.getNextHighestDepth());
      //msk._x = 10;
      maskara._x += maskara._width;
      clip.setMask(msk);
}


Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Mar 2009 12:03 pm
Ehm, duplicar si duplica los MC, lo que no hace es enmascarar cada uno de los MC que se duplican.

Voy a probar con el codigo de tu post haber si lo consigo.

Muchas gracias LongeVie

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Mar 2009 12:18 pm
Ok, entonces no enmascara, pero si duplica la mascara tambien?

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Mar 2009 12:26 pm
Si duplica pero sólo si le quito "var msk:MovieClip = this." a la línea "var msk:MovieClip = this.duplicateMovieClip(maskara, "maskara"+e, this.getNextHighestDepth()); "

Y lo duplica variando el espacio entre mascara y mascara... no entiendo bien lo que pasa

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Mar 2009 12:27 pm
Rectifico: sólo si le quito el "this." a "var msk:MovieClip = this.duplicateMovieClip(maskara, "maskara"+e, this.getNextHighestDepth());"

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Mar 2009 12:31 pm
En definitiva, ahora lo tengo asi:

var cargador:MovieClipLoader = new MovieClipLoader();
for ( e=0; e < 10; e++) {

var clip:MovieClip = duplicateMovieClip(pantalla_mc, "pantalla_mc"+e, this.getNextHighestDepth());
clip.createEmptyMovieClip( "contenedor", 0 );
cargador.loadClip( noticias_xml.firstChild.childNodes[_indice].childNodes[e].firstChild.nodeValue, clip.contenedor );
this["pantalla_mc"]._x += pantalla_mc._width;

var msk:MovieClip = duplicateMovieClip(maskara, "maskara"+e, this.getNextHighestDepth());
this["maskara"]._x += maskara._width;
clip.setMask(msk);

}

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Mar 2009 01:42 pm
Ah ok, perfecto, lo del this, seguramente no funciona porque corres el script dentro de algun boton o algo asi. bueno, entonces dime, ya sin el this, aun no aplica la mascara?

Código ActionScript :

var cargador:MovieClipLoader = new MovieClipLoader();
for ( e=0; e < 10; e++) {

var clip:MovieClip = duplicateMovieClip(pantalla_mc, "pantalla_mc"+e, this.getNextHighestDepth());
clip.createEmptyMovieClip( "contenedor", 0 );
cargador.loadClip( noticias_xml.firstChild.childNodes[_indice].childNodes[e].firstChild.nodeValue, clip.contenedor );
pantalla_mc._x += pantalla_mc._width;

var msk:MovieClip = duplicateMovieClip(maskara, "maskara"+e, this.getNextHighestDepth());
msk._x = clip._x;
msk._y = clip._y;
clip.setMask(msk);

} 



El codigo colocalo asi:

Código :

[code]Codigo[/code]

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Mar 2009 03:52 pm
Hola LongeVie!
Ante todo muchas gracias!!

Pues todavia no se aplican las mascaras sobre los MC. El código lo tengo igual que como me los has puesto.
Lo estoy haciendo en el primer frame para probar, pero después se ejecutará a través de un botón.

No se que puede pasar.

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 17 Mar 2009 12:34 am
U_U pero entonces puedes ver todas los clips maskara y los clips pantalla_mc? osea, el problema es unicamente que no aplica la mascara?

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 17 Mar 2009 10:02 am
jejeje si, aparecen los mc duplicados y las mascaras duplicadas encima (las mascaras las he puesto mas chicas para distinguirlas de los mc).

Si quieres te paso todo el codigo, en realidad tiene pinta de ser cualquier tonteria que me paso por alto.

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 17 Mar 2009 05:21 pm
bueno,primero ve a los clips que se van a duplicar y quitales la parte donde dice "usar como cache" en el panel de propiedades.

si eso no funciona, postea el codigo para ver como lo tienes, ¿Es muy necesario duplicar los clips? porque podriamos crearlo todo por codigo.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 18 Mar 2009 10:34 am
Hola de nuevo LongeVie!

He probado lo de desactivar el cache pero nada. No hay ningún inconveniente en crear los mc dinámicamente, te pongo el código de cómo lo tengo hecho hasta ahora:

Código :


System.useCodepage = true; 
var indice:Number; 

var galeria_xml:XML; 
function cargarDatos(_indice:Number){
      
      var titulo:String;
      var foto1:String;
      var foto2:String;
      var foto3:String;
      var foto4:String;
      var foto5:String;
      var foto6:String;
      var foto7:String;
      var foto8:String;
      var foto9:String;
      var foto10:String;
            
      titulo = galeria_xml.firstChild.childNodes[_indice].attributes.titulo;
      foto1 = galeria_xml.firstChild.childNodes[_indice].childNodes[0].firstChild.nodeValue;
      foto2 = galeria_xml.firstChild.childNodes[_indice].childNodes[1].firstChild.nodeValue;
      foto3 = galeria_xml.firstChild.childNodes[_indice].childNodes[2].firstChild.nodeValue;
      foto4 = galeria_xml.firstChild.childNodes[_indice].childNodes[3].firstChild.nodeValue;
      foto5 = galeria_xml.firstChild.childNodes[_indice].childNodes[4].firstChild.nodeValue;
      foto6 = galeria_xml.firstChild.childNodes[_indice].childNodes[5].firstChild.nodeValue;
      foto7 = galeria_xml.firstChild.childNodes[_indice].childNodes[6].firstChild.nodeValue;
      foto8 = galeria_xml.firstChild.childNodes[_indice].childNodes[7].firstChild.nodeValue;
      foto9 = galeria_xml.firstChild.childNodes[_indice].childNodes[8].firstChild.nodeValue;
      foto10 = galeria_xml.firstChild.childNodes[_indice].childNodes[9].firstChild.nodeValue;
                   
                pantalla_mc.loadMovie(galeria_xml.firstChild.childNodes[_indice].childNodes[0].firstChild.nodeValue)
      
                //--------------- DUPLICAMOS EL CLIP "PANTALLA_MC" Y DISTRIBUIMOS EN LA PELICULA
             
      var cargador:MovieClipLoader = new MovieClipLoader();
      for ( e=1; e < 5; e++) {
      
      var clip:MovieClip = duplicateMovieClip(pantalla_mc, "pantalla_mc"+e, this.getNextHighestDepth()); 
      clip.createEmptyMovieClip( "contenedor", 0 ); 
      cargador.loadClip( galeria_xml.firstChild.childNodes[_indice].childNodes[2].firstChild.nodeValue, clip.contenedor ); 
            
      pantalla_mc._x += pantalla_mc._width; 
       
      var msk:MovieClip = duplicateMovieClip(maskara, "maskara"+e, this.getNextHighestDepth()); 
      
      maskara._x += pantalla_mc._width; 
      msk._y = clip._y; 
      clip.setMask(msk); 
      
      contenedor._x = (Stage.width - contenedor._width)/2;
      
      }
         
      for ( _indice=0; _indice< galeria_xml.firstChild.childNodes.length; _indice++) {
         
      //-------- CREA BOTONES ---------//
      
      duplicateMovieClip(cont_bots, "cont_bots"+_indice, this.getNextHighestDepth());
        this["cont_bots"]._x += this["cont_bots"]._width + 5      
      this["cont_bots"+_indice].texto.text = galeria_xml.firstChild.childNodes[_indice].attributes.titulo;
      
                //------ CONT_BOTS ES UN MC QUE CONTIENE LAS CAJAS DE TEXTO DENTRO -----
      
            
      //-------- ABRE LA GALERIA EN LA QUE PINCHEMOS ---------//
         
      botonera["cont_bots"+_indice].indice = _indice 
      botonera["cont_bots"+_indice].onRelease = function(){  cargarDatos(this.indice); }
           
                //------------------------------------------------------//
                
pantalla_mc.onRelease = function(){  abre_foto.loadMovie(foto1); } // esto es para abrir la foto en un contenedor mc que esta en el centro de la pelicula.
pantalla_mc2.onRelease = function(){  abre_foto.loadMovie(foto2); }
pantalla_mc3.onRelease = function(){  abre_foto.loadMovie(foto3); }
//.
//.
//.
//. ASÍ HASTA UN MAXIMO DE 10 FOTOS EN LA PELICULA
             
}
}

indice=0;
galeria_xml = new XML();
galeria_xml.ignoreWhite = true;
galeria_xml.load("fotos.xml");
galeria_xml.onLoad = function(){ cargarDatos(indice); }



Hasta el momento llevo esto hecho :P
Muchas Gracias LongeVie.

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 18 Mar 2009 09:30 pm
Bueno, antes de andar por ahi buscando errores en el codigo, mirate esta galeria.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 19 Mar 2009 09:52 am
Jejejej,

Esta perfectisima, gracias por el aporte.
Lo que pasa es que soy muy cabezota y me he propuesto aprender de una vez por todas :P

Por eso intento hacerlo por mis medios... ainss en fin.

Muchisimas gracias LongeVie, ere un crack :wink:

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 19 Mar 2009 09:57 am
Si, eso es bueno, en realidad te coloque el link para que vieras masmoenos el porceso que yo use para crear una galeria, los pasos y la forma de integrar el xml. los eventos y demas cosas que explique. Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 19 Mar 2009 02:55 pm
Hola de nuevo!!

Cacharreando mucho y viendo cosas de aqui y de alli lo he consiguido mendiante esto:

Código :

for ( e=1; e < 5; e++) {

var container:MovieClip = createEmptyMovieClip("container", getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
var loadListener:Object = new Object();

loadListener.onLoadComplete = function(container) { container.setMask(maskara); };

mcLoader.loadClip(noticias_xml.firstChild.childNodes[_indice].childNodes[e].firstChild.nodeValue, container);
mcLoader.addListener(loadListener);
}


("maskara" es un mc que esta creado sin código)

Perfecto!, pero ahora como hago para duplicar esto x10 cada una con una foto??? jaja esto de que se te presenten problemas conforme avanzas no esta mal del todo es divertido.

He probado a duplicar "container" pero no me aclaro.

Ayudaaaaaaa.
Gracias!

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 19 Mar 2009 10:56 pm
Prueba con

Código ActionScript :

var mcLoader:MovieClipLoader = new MovieClipLoader();
var loadListener:Object = new Object();
loadListener.onLoadComplete = function( target:MovieClip )
{
    //taget._name.substr(4) es el nombre del clip despues de las primeras 4 letras cont1 seria 1
    target.setMask( taget._parent[ "mask" + taget._name.substr(4) ] );
};
mcLoader.addListener(loadListener);

for ( var e:Number = 0; e < 10; e++ )
{
    var container:MovieClip = createEmptyMovieClip("cont" + e, getNextHighestDepth());
    //Aqui debes colocar el codigo para duplicar la mascara, el nombre debe ser "mask" + e
    mcLoader.loadClip(noticias_xml.firstChild.childNodes[_indice].childNodes[e].firstChild.nodeValue, container);
}

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 20 Mar 2009 08:55 am
Hola LongeVie!

Esto es lo que le he puesto: (he cambiado en nombre de "mask" por "mesk" ya que se trata de una palabra reservada de AS.)

Código :

createEmptyMovieClip("mesk", getNextHighestDepth());
mesk.beginFill(0xDFE5BB,100);
mesk.moveTo(0,0);
mesk.lineTo(45,0);
mesk.lineTo(45,320);
mesk.lineTo(0,320);
mesk.endFill();
mesk._y = 150
      
var mcLoader:MovieClipLoader = new MovieClipLoader(); 
var loadListener:Object = new Object(); 
loadListener.onLoadComplete = function( target:MovieClip ) 
{ 
    //taget._name.substr(4) es el nombre del clip despues de las primeras 4 letras cont1 seria 1 
    target.setMask( target._parent[ "mesk" + target._name.substr(4) ] ); 
}; 
mcLoader.addListener(loadListener); 
 
for ( var e:Number = 0; e < 10; e++ ) 
{ 
    var container:MovieClip = createEmptyMovieClip("cont" + e, getNextHighestDepth()); 
    //Aqui debes colocar el codigo para duplicar la mascara, el nombre debe ser "mask" + e 
   duplicateMovieClip(mesk, "mesk"+e, getNextHighestDepth())
   this["mesk"]._x += this["mesk"]._width
   this["mesk"]._y = 150
   
   mcLoader.loadClip(noticias_xml.firstChild.childNodes[_indice].childNodes[e].firstChild.nodeValue, container); 
      
} 


Lo que me resulta es que se me duplican las mascaras cargandose las fotos pero no de forma consegutivas, por ejemplo: si hay 4 fotos en la galería me carga la primera, la segunda no, la tercera si...
Ademas, cuando pulso para que se cargue otra galeria en el menu se duplican las mascaras por el doble (si en el bucle cargamos 10 pues pasan a ser 20).

jajaja estoy super liado y no entiendo bien lo que estoy haciendo.
Gracias LongeVie!!

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 20 Mar 2009 09:54 am
Vale! Ya lo he solucionado!

No era del AS era del XML que estaba mal estructurado :P

Voy a seguir que ya estoy entusiasmadooOooO!!

Gracias LongeVie!!!!

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 20 Mar 2009 11:04 am
Ahora quiero abir la imagen que pulse en las miniaturas y me dice "undefined":

Código :

var foto_grande:MovieClipLoader = new MovieClipLoader(); 
var mcLoader:MovieClipLoader = new MovieClipLoader(); 
var loadListener:Object = new Object(); 
loadListener.onLoadComplete = function( target:MovieClip ) 
{ 
    //taget._name.substr(4) es el nombre del clip despues de las primeras 4 letras cont1 seria 1 
    target.setMask( target._parent[ "mesk" + target._name.substr(4) ] ); 
}; 
mcLoader.addListener(loadListener); 

var img:MovieClip = createEmptyMovieClip("imagen", getNextHighestDepth()); 

for ( var e:Number = 0; e < noticias_xml.firstChild.childNodes.length; e++ ) 
{ 
    var container:MovieClip = createEmptyMovieClip("cont" + e, getNextHighestDepth()); 
       
   duplicateMovieClip(mesk, "mesk"+e, getNextHighestDepth())
   this["mesk"]._x += this["mesk"]._width + 5
   this["mesk"]._y = 150
   
   mcLoader.loadClip(noticias_xml.firstChild.childNodes[_indice].childNodes[e].firstChild.nodeValue, container); 
      
   this["mesk"+e].onRelease = function(){
      foto_grande.loadClip(noticias_xml.firstChild.childNodes[_indice].childNodes[e].firstChild.nodeValue, img)
      }      
}    


Seguro que es una tontería...

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 21 Mar 2009 12:28 am
No veo por ninguna lado donde toma valor _indice.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.