Comunidad de diseño web y desarrollo en internet online

mascara y contenido añadido con codigo

Citar            
MensajeEscrito el 08 Jun 2010 06:57 pm
Hola de nuevo, siento la preguntera ... pero me está costando adaptarme a AS3. Ahora el problema es que he creado una mascara en la linea de tiempo, sin código, a la que van asociados 5 movieclips, los muestra bien, pero el contenido que tengo añadido al escenario dinamicamente, con addChild, tambien me lo mete en la mascara del escenario, como se podría solucionar?


Saludos

Por douglashall

14 de clabLevel



 

safari
Citar            
MensajeEscrito el 09 Jun 2010 06:47 am
Deberías tener un Mc vacío FUERA de la máscara de la línea de tiempo y añadir el contenido, en lugar de al escenario, al Mc vacío

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Jun 2010 10:00 am
Hola Eliseo, gracias, creo un mc en el escenario en otra capa encima de la mascara y listo. Me surge otra cosa, que bueno, esta relacionada con los addChild y los eventos de raton, te pongo el codigo de los menus:

Código ActionScript :

stop();

var xInicial:Number=10;
//creamos un array para guardar el nombre de cada seccion
var arrayNombreSec:Array = new Array();
//creamos un array para guardar el numero de elementos(items) de cada seccion
var arrayNumItems:Array = new Array();
//guardamos en una variable el numero de secciones
var longMenu:Number=xmlData.secciones.*.length();
var longItems:Number;

function cargaMenu():void {
   for (var i= 0; i<longMenu; i++) {
      var nombreSec:seccionVinc = new seccionVinc();
      nombreSec.seccion_mc.texto_txt.text=xmlData.secciones.seccion[i].@nombre;
      arrayNombreSec[i]="seccion"+i;
      nombreSec.x=xInicial+170*i;
      nombreSec.y=0;
      //los añadimos dentro del contenedor del escenario
      menu_mc.addChild(nombreSec);
      TweenMax.to(nombreSec.seccion_mc, 0.5, {x:0, onComplete:cargaBarras});
      longItems=xmlData.secciones.seccion[i].*.length();
      arrayNumItems[i]=xmlData.secciones.seccion[i].*.length();

      for (var j= 0; j<longItems; j++) {
         var item:itemVinc = new itemVinc();
         item.prueba.text=xmlData.secciones.seccion[i].sec[j].@nombre;
         item.x=xInicial+170*i;
         item.y=item.height*j;
         item.buttonMode=true;
         item.useHandCursor=true;
         item.addEventListener(MouseEvent.MOUSE_OVER,seccionOver);
         item.addEventListener(MouseEvent.MOUSE_OUT,seccionOut);
         item.addEventListener(MouseEvent.CLICK,seccionPulsada);
         addChild(item);//  <-- Aqui quiero añadir a cada mc ( 5 tengo en el escenario ) las subsecciones
         //trace(i+"-"+j+"-"+xmlData.secciones.seccion[i].sec[j].@nombre);
      }
   }
}
cargaMenu();

function cargaBarras():void {
   for (var i= 0; i<longMenu; i++) {
      var barrita:lineaVinc = new lineaVinc();
      if (i==0) {
         TweenMax.to(barrita, 0.5, {scaleY:300});
      } else {
         TweenMax.to(barrita, 0.5, {scaleY:100});
      }
      barrita.x = (xInicial-5)+170*i;
      barrita.y=105;
      addChild(barrita);
   }
}


function seccionPulsada(evt:Event):void {
   var item:MovieClip=evt.target as MovieClip;
   if (item.name.substring(7)=="4") {
   }

}

function seccionOver(evt:Event):void {
   var item:MovieClip=evt.target as MovieClip;
   trace(item.name)
   //TweenMax.to(item, 0.5, {tint:0x666666});
}

function seccionOut(evt:Event):void {
   var item:MovieClip=evt.target as MovieClip;
   TweenMax.to(item, 0.5, {tint:0xffffff});
}


Creo los nombres de los menus del xml, eso bien, saco los nombres de las subsecciones, eso tambien bien, pero no soy capaz de añadir las subsecciones del menu a 5 mcs que tengo en el escenario ( "seccion0, 1, 2 ... 5 ), lo he intentado como me habeis comentado, con el valor guardado en el array, o como nombreSec.name = "seccion"+i

Código ActionScript :

arrayNomSec[i].addChild(item);
nombreSec.addChild(item);


pero nada, no me funciona, en as2 era sencillo identificar los mcs creados, pero aqui ufff, no se por donde meterle mano. Decir que si añado al escenario normalmente addChild(item) me los crea bien, cada uno en su sitio, pero necesito que meta cada item en su mc, para luego poder darles efectos de movimientos etc.

Luego me surge tambien en los eventos de raton algunos problemas, bueno, mas bien todos los problemas porque no funciona :) . Me dan error, no se si porque el evento se lo doy a la caja de texto, o que, el caso es que el mismo codigo, aplicado a los nombres de las secciones, si corre bien. Decir que la profundidad de los nombres de la seccion es una mas, es decir, hay otro mc por medio que me permite hacer un pequeño movimiento hasta situarlo donde quiero.

A ver si me peudes ayudar, saludos.

Por douglashall

14 de clabLevel



 

safari
Citar            
MensajeEscrito el 09 Jun 2010 10:39 am
Debería ser simplemente, dentro del bucle

Código ActionScript :

for (var i:int= 0; i<longMenu; i++) { 
      var nombreSec:seccionVinc = new seccionVinc(); 
      ....
      for (var j:int= 0; j<longItems; j++) { 
         var item:itemVinc = new itemVinc(); 
          ....
         nombreSec.addChild(item); //<--aquí los añadimos
      } 
   } 

Con eso debería añadir los "items" a los "nombreSec" sin ningún problema. Si existe algún problema es precisamente con la variable longItems. Esa variable la tienes declarada a nivel de frame. Me da la impresión de que cambias su valor en algún otro sitio. Usa otra variable si puedes y declaralá dentro del for

Código ActionScript :

for (var i:int= 0; i<longMenu; i++) { 
      var nombreSec:seccionVinc = new seccionVinc(); 
      ....
      var longItems:int=xmlData.secciones.seccion[i].*.length();  //<--la declaramos aquí
      for (var j:int= 0; j<longItems; j++) { 
         var item:itemVinc = new itemVinc(); 
          ....
         nombreSec.addChild(item);
      } 
   } 


Reconozco que me "suena extraño" ese xmlData.secciones.seccion[i].*.length(), pero si dices que te da algún valor...
(es que no ando demasiado ducho en los XML -debería volver a revisar el excelente post de kirupa (está en inglés, pero se entiende más o menos fácil) para asegurarte si está más o menos correcto.

Por otra parte, respecto a los EventosMouse, Si los añades , tanto en los "nombreSec", como en los "item", vas a tener problemas casi seguro si no tienes cuidado.
Después de echarle un vistazo al este post donde hablo de lo que ocurre con los eventos del ratón en un Mc DENTRO de otro MC y las propiedades "target" y "currentTarget" puedes optar por comprobar que target y currentTarget sean iguales o por únicamente añadir los listeners a los "nombreSec"

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Jun 2010 11:00 am
Hola Eliseo, no funciona como dices, muetra un objeto del xml, pero no me saca en cada mc su contenido. Sobre lo de la variable, te pongo el resutaldo de la salida del trace, es correcto:

Código :

0-0-Pueblo
0-1-Historia
0-2-Tradición
0-3-Gastronomia
0-4-Fiestas
0-5-Termino
1-0-Pueblo
1-1-La Vega
1-2-Prado la Fuente
1-3-Cañailla
1-4-Cuestas
1-5-Morteros
1-6-Sierra
1-7-Navazuela
1-8-Pernalar
1-9-Pozo Labajo
1-10-Alto Carro
1-11-Fuenlabrada
1-12-H Rambla
1-13-Sallona
1-14-Goyizno
1-15-Prado la Huerta
2-0-Clima
2-1-Naturaleza
2-2-Hostales
2-3-Cabañas
2-4-Casas Rurales
3-0-Español
3-1-Ingles
3-2-Holandes
4-0-Webmaster
4-1-Ayuntamiento
4-2-Tlf Publico


Como ves, cada seccion tiene varios elementos, y estos deberian aparecer en su mc, 0 con sus 6 elementos irira en el mc seccion0 que previamente en el codigo he reseñado ( ya sea en el array, o como nombreSec.name = "seccion"+i ), y asi con los demas, pero ya te digo que no los mete :( .

Se te ocurre la causa?

Un saludo

Por douglashall

14 de clabLevel



 

safari
Citar            
MensajeEscrito el 09 Jun 2010 11:27 am

douglashall escribió:

Como ves, cada seccion tiene varios elementos, y estos deberian aparecer en su mc, 0 con sus 6 elementos irira en el mc seccion0 que previamente en el codigo he reseñado ...
Se te ocurre la causa?

La causa debe estar(*) en otra parte: que estén bajo una máscara, que se salgan del stage, que la posición sea muy lejana... No sé. (supongo que has quitado lo de item.x=xInicial+170*i;)
Una prueba simple

Código ActionScript :

for (var i:int = 0; i < 4;i++){
   var mc_contenedor:Sprite = new Sprite()
   mc_contenedor.graphics.beginFill(0xFFCCFF);
   mc_contenedor.graphics.drawCircle(80, 80, 80);
   mc_contenedor.x=200+200*i
   addChild(mc_contenedor)
   for (var j:int = 0; j < 5;j++){
      var auto:Auto = new Auto();
       auto.y = 100*j;
      mc_contenedor.addChild(auto);
   }
}

Funciona como deberíamos esperar. Podrías tratar de tener un .fla más simple sólo con el código que lee el XML y tus definiciones a ver si está en otra parte

(*)Siempre que diho "debe estar" lo digo con mucho cuidado

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Jun 2010 01:07 pm
Hola de nuevo Eliseo, si, he quitado las mascaras y lo he probado, con las posiciones fijas etc, y nada.

El codigo que tu pones funciona como debería, pero fijate que si yo en vez de poner:

Código ActionScript :

nombreSec.addChild(item)

pongo directmente uno de los mc que ya tengo en el escenario, tal que así:

Código ActionScript :

sesccion0.addChild(item)

me mete todo dentro de ese mc, al igual que en tu ejemplo. Por eso digo que me parece que no coge el valor de la variable. Fijate que esto con AS2 era mucho mas simple, funcionaba sin problema:

Código ActionScript :

var seccion = attachMovie("textosVinc", "seccion"+i, getNextHighestDepth());

cada vez que pasaba el for por esa variable, le asignaba el nombre de instancia para poder referirme a el. Ahora es como si pasara de lo que le decimos cuando pongo:

Código ActionScript :

nombreSec.name = "seccion"+i
//y luego lo uso para
nombreSec.addChild(item)

En fin, no se si me está gustando pasar a AS3 :) jeje.

Un saludo y gracias, a ver si se te ocurre algo.

Por douglashall

14 de clabLevel



 

safari
Citar            
MensajeEscrito el 10 Jun 2010 03:39 pm
Hola, mirar, como no puedo ( no soy capaz ) de ir añadiendo las secciones a sus mcs con el valor de la variable, pruebo a hacerlo con condiciones ( if o case ), en este caso esta con if, pero con case me hace lo mismo, la tirada de la primera seccion i = 0, la mete en su sitio ( en el mc seccion0 ) pero cuando pasa a i = 1, me mete las secciones en el mc seccion2 :? , es decir me va dejando uno en blanco a cada pasada del for:

----0-----|----1-----|----2-----|----3-----|----4----|
lleno vacio lleno vacio lleno

el dos me lo llena con lo que tendria que llenar el 1, y asi, y los condiciones estan bien ... , me está matando as3 .

Código ActionScript :

stop();

var xInicial:Number=10;
//creamos un array para guardar el nombre de cada seccion
var arrayNombreSec:Array = new Array();
//creamos un array para guardar el numero de elementos(items) de cada seccion
var arrayNumItems:Array = new Array();
//guardamos en una variable el numero de secciones
var longMenu:Number=xmlData.secciones.*.length();
var longItems:Number;

function cargaMenu():void {
   for (var i= 0; i<longMenu; i++) {
      //vinculamos, añadimos el texto y posicionamos
      var nombreSec:seccionVinc = new seccionVinc();
      nombreSec.seccion_mc.texto_txt.text=xmlData.secciones.seccion[i].@nombre;
      //nombreSec.name = "seccion"+i <-- Dando valor asi, no puedo añadir a nombreSec.addChild(item)
      nombreSec.x=xInicial+170*i;
      nombreSec.y=0;
      //los añadimos dentro del contenedor del escenario y movemos el mc interior de nombreSec
      menu_mc.addChild(nombreSec);
      TweenMax.to(nombreSec.seccion_mc, 0.5, {x:0, onComplete:cargaBarras});
      //guardamos el numerod e items de cada seccion
      longItems=xmlData.secciones.seccion[i].*.length();
      arrayNumItems[i]=xmlData.secciones.seccion[i].*.length();

      for (var j= 0; j<longItems; j++) {
         //vinculamos, añadimos el texto, le damos eventos de raton y posicionamos
         var item:itemVinc = new itemVinc();
         item.texto_txt.text=xmlData.secciones.seccion[i].sec[j].@nombre;
         item.x=xInicial+170*i;
         item.y=item.height*j;
         item.texto_txt.mouseEnabled=false;
         item.buttonMode=true;
         item.useHandCursor=true;
         item.addEventListener(MouseEvent.MOUSE_OVER,seccionOver);
         item.addEventListener(MouseEvent.MOUSE_OUT,seccionOut);
         item.addEventListener(MouseEvent.CLICK,seccionPulsada);
         if (i==0) {
            seccion0.addChild(item);
         }
         if (i==1) {
            seccion1.addChild(item);
         }
         if (i==2) {
            seccion2.addChild(item);
         }
         if (i==3) {
            seccion3.addChild(item);
         }
         if (i==4) {
            seccion4.addChild(item);
         }
         //trace(i+"-"+j+"-"+xmlData.secciones.seccion[i].sec[j].@nombre);
      }
   }
}

cargaMenu();

Alguna idea?

Por douglashall

14 de clabLevel



 

safari

 

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