Comunidad de diseño web y desarrollo en internet online

Necesito asociar enlaces a botones desde un xml...

Citar            
MensajeEscrito el 10 Feb 2011 11:18 am
Buenas, es mi primer mensaje en Cristalab. Generalmente suelo leer a menudo el foro, pero no suelo participar en él. Me encuentro atascado y no sé como resolver esto que os propongo en AS3, a ver si alguna alma caritativa puede orientarme ya que he probado varias cosas y no funciona nada. Gracias:

Por un aldo tengo el xml con con los enlaces como attributos:

Código XML :

<PROMOS_PARTICULARES>

   <espanol>

      <PROMO titulo="uno" ruta="./promos_principales/particulares/western.swf" enlace="http://www.marca.es" tiempo="50000"></PROMO>
      <PROMO titulo="dos" ruta="./promos_principales/particulares/libro_de_sellos.swf" enlace="https://www.google.es" tiempo="50000"></PROMO>

   </espanol>

</PROMOS_PARTICULARES>



y el as:

Código ActionScript :

import flash.net.URLRequest;
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.utils.*;
import flash.filters.DropShadowFilter;
import flash.text.*;
import flash.display.Stage;
import flash.ui.Mouse;

///variables//

var activa:Object = root;  /// este para cambiar la animacion
var total_promos:Object = root;  /// este para ver el numero de promos
var objArray:Array = new Array(); // y este otro los botones 

var objPosis_Init:Array = new Array();  //Registro de las primeras posiciones de las cajas
var objPosis:Array = new Array();  //Posterior almacenamiento de las siguientes porque no chuta contenedor.x dentro del evento.

///español///

var nombres_es:Array = new Array();
var ruta_es:Array = new Array();
var enlace_es:Array = new Array();

/////cargamos xml////

var xmlLoader:URLLoader = new URLLoader(); 
var xmlData:XML = new XML(); 
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);   
xmlLoader.load(new URLRequest("xml/promociones_particulares.xml")); 
  
function LoadXML(e:Event):void { 
xmlData = new XML(e.target.data); 
carga();  // <<--lanza funcion
} 

function carga(){    // <-- carga menu

var recoge:uint  = xmlData.espanol.PROMO.length();

for(var i:uint = 0 ; i < recoge ; i++){
      
      ruta_es.push(xmlData.espanol.PROMO[i].attribute("ruta")); 
      enlace_es.push(xmlData.espanol.PROMO[i].attribute("enlace")); 
      nombres_es.push(xmlData.espanol.PROMO[i].attribute("titulo")); 
      
      desactivabarra();
            
      var cuadra:MovieClip = new MovieClip();
      var contenedor = new Loader();
      contenedor.load(new URLRequest(ruta_es[i]));
      contenedor.y = 0;
      contenedor.x = (separate * i) + (separate2 * i);
      cuadra.y=0;
      cuadra.x=(separate * i) + (separate2 * i);
      cont.addChild(contenedor);
      cont.addChild(cuadra);
   
      objArray.push(contenedor);
      
      objPosis_Init.push(contenedor.x); /// mete posiciones de inicio.
      objPosis.push(contenedor.x); /// mete posiciones siguientes.
   
      cuad.addEventListener(MouseEvent.MOUSE_DOWN,onCuadMouseDown);
      
      //////eventos enlaces//////
   
      contenedor.addEventListener(MouseEvent.CLICK, golink);
      
      function golink(e:MouseEvent) : void
      {
         e.currentTarget.url ....
        
      }
      ////////////////////////////

      function onCuadMouseDown(event:MouseEvent) : void
      {
         cuad.startDrag(false,scrollzone)
         stage.addEventListener(MouseEvent.MOUSE_UP,onStageMouseUp);
         activa.gameStat = "play";
         timer.stop();
      }
      function onStageMouseUp(event:MouseEvent) : void
      {
         activa.gameStat = "stop";
         cuad.stopDrag();
         stage.removeEventListener(MouseEvent.MOUSE_UP,onStageMouseUp);

         timer.start();
         objPosis.splice(0);
         
         for(var i:uint = 0 ; i < recoge ; i++){
         objPosis.push(objPosis_Init[i] + Math.floor(cont.x));
         }
         trace(objPosis);/// < -- posiciones..
      }
      activa.total_promos = recoge;
   }
}



Básicamente lo que necesito hacer, es decirle en esta función a los contenedores que se crean para cargar imágenes, que tienen que asociar los enlaces que he metido dentro del Array "enlace_es", para que cuando hagla clicks en éstas imágenes cargen los enlaces correspondientes. Vamos asociar botones con enlaces.

Código ActionScript :

contenedor.addEventListener(MouseEvent.CLICK, golink);
      
      function golink(e:MouseEvent) : void
      {
         e.currentTarget...
        
      }


No sé como hacerlo porque no puedo usar la propiedad "this" de igual modo que en as2 a la que estoy acostumbrado para asociar ambos elementos, así como tp e.currentTarget.url puesto que no me deja dentro de la clase new Loader y no sé porqué o que no estaré haciéndolo bien.

Ni idea de como construirlo, si alguién puediera contestarme le estaría muy agradecido.

Por messayiah

20 de clabLevel



 

msie8
Citar            
MensajeEscrito el 10 Feb 2011 11:50 am
Has descrito el problema perfectamente, efectivamente, el "this" de AS.2 es e.currentTarget, y a un Loader NO le podemos añadir "variables", o "propiedades" (en AS.3 sólo podemos añadir nuevas propiedades o variables a los Objects y a los MovieClips -es lo que se conoce como clases sellada y no sellada-)
Pero sí puedes usar la propiedad "name" del loader, y es lo que se suele hacer

Código ActionScript :

for (...){
   ...
  var contenedor = new Loader(); 
  //aquí mismo, perosnalmente no me gustan los
  //nombres que son números, así que le pongo un "prefijo"
  contenedor.name="ld"+i
  contenedor.load(new URLRequest(ruta_es[i])); 
   ....
  contenedor.addEventListener(MouseEvent.CLICK, golink); 
}
      
 function golink(e:MouseEvent) : void  { 
         trace(e.currentTarget.name)
         var i:Number=Number(e.currentTarget.name.substr(2))
         trace(i) //saldrá 0,1,2...
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Feb 2011 11:59 am
Pues muchas gracias tio, te debo una :)

Por messayiah

20 de clabLevel



 

msie8

 

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