Comunidad de diseño web y desarrollo en internet online

Cargar un mismo objeto varias veces pero cambiando el nombre

Citar            
MensajeEscrito el 07 Feb 2011 11:22 am
Hola buenos días.
¿Cómo se puede cargar un mismo objeto varias veces pero cambiando el nombre para que resulten objetos distintos?
Por ejemplo: Cargar un cuadrado, luego volver a cargar otro cuadrado (mismo objeto) pero que sean sprites distintos para poder modificar color etc.. independientemente.

Por ejemplo pulsando un botón se carga el mismo cuadrado pero en realidad es uno nuevo.
Lo que necesito es el código para que se cargue el cuadrado y cambio de nombre,clase.

Gracias. Un saludo.

Por honsuales

23 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Feb 2011 11:38 am
Honsuales, TODOS los MCs proceden de un símbolo y tienen una Clase Asociada.
¿cómo se añade un "objeto" de esa clase?

Código ActionScript :

var mc:MovieClip=new MiClase()
//podemos darle valor a la propiedad "name"
mc.name="obj1"
//Y la a x, la y...
mc.x=mc.y=100
//finalmente lo añadimos
addChild(mc)

Básicamente es lo que "flash" hace por nosotros cuando tenemos un objeto en la pantalla en tiempo de diseño. Puedes añadir tantos objetos de la clase como quieras, p.e. en un for

Código ActionScript :

for (var i:int=0;i<100;i++){
   var mc:MovieClip=new MiClase()
   mc.name="obj"+i.toString()
    mc.x=mc.y=600*Math.random()
  //finalmente lo añadimos
  addChild(mc)
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Feb 2011 12:16 pm
Gracias nuevamente Eliseo.
Voy a probarlo y te comento.
Un saludo.

Por honsuales

23 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Feb 2011 01:30 pm
Hola Eliseo,realmente no se cómo hacerlo.
Entiendo el código pero no sé como meterlo.
Tengo este código para que al pulsar un botón se cargue un archivo.
Me gustaría que al pulsar nuevamente el botón se cargue el archivo pero con otro nombre para que sean objetos independientes. Y cada vez que se pulse el botón se carga el mismo objeto pero en lugar de sim1, cambie el nombre a sim2, y así. Teniedo tantos objetos como veces pulsado el botón y con nombre distinto.


// Carga de los objetos al escenario

boton_sim.addEventListener(MouseEvent.MOUSE_DOWN,cargarsim)
var indicesim:Number=1
function cargarsim (e: MouseEvent) :void {
var ruta_sim : URLRequest = new URLRequest ("graficos/sim" + indicesim +".swf");
var carga: Loader = new Loader();
carga.load (ruta_sim);
carga.contentLoaderInfo.addEventListener (Event.COMPLETE, mostrarsim);
function mostrarsim( e:Event):void {
addChild (carga);
carga.x = 450;
carga.y = 450;
}
}

Por honsuales

23 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Feb 2011 01:51 pm
Mira un ejemplo de como lo implementarías a tu código como:

Código ActionScript :

stage.addEventListener(MouseEvent.MOUSE_DOWN,cargarsim) 
var indicesim:Number=1
var carga: Loader
var num:Number = 0
function cargarsim (e: MouseEvent) :void 
{
   var ruta_sim : URLRequest = new URLRequest ("http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs712.ash1/161899_72221948584_3793311_q.jpg");//una imagen de ejemplo
   carga = new Loader();
   carga.load (ruta_sim);
   carga.contentLoaderInfo.addEventListener (Event.COMPLETE, mostrarsim);
   function mostrarsim( e:Event):void 
   {
      addChild (carga);
      carga.name = "carga"+num//cambias el nombre como dice Eliseo
      carga.addEventListener(MouseEvent.CLICK, onName)//para saber q tiene un nombre diferente
      carga.x += 45*num; //solo para q se cargue en una posición diferente
      carga.y += 45*num;//solo para q se cargue en una posición diferente
      num++
   }
}

function onName(e:MouseEvent)
{
   trace(e.target.name)// acá comprobamos q  tengan diferente nombre
}

Por el_putas

58 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Feb 2011 03:38 pm
Tal y como dice El_putas, el problema es que cargas ENCIMA del mismo. De cualquier modo hay una cosa el el código que no me gusta especialmente y es tener una función DENTRO de otra función. Ya sé que funciona pero no me gusta. Conceptualmente estamos redefiniendo constantemente un función, pero, por lo que no me gusta es que dependemos del "scope" (que es algo que a la larga nos traerá de cabeza)
Pongo el código que NO funciona, pero separadas las funciones

Código ActionScript :

stage.addEventListener(MouseEvent.MOUSE_DOWN,cargarsim)  
var indicesim:Number=1 
var carga: Loader 
var num:Number = 0 
function cargarsim (e: MouseEvent) :void  
{ 
   var ruta_sim : URLRequest = new URLRequest ("graficos/sim" + indicesim +".swf"));
   carga = new Loader(); 
   carga.load (ruta_sim); 
   carga.contentLoaderInfo.addEventListener (Event.COMPLETE, mostrarsim); 
}
function mostrarsim( e:Event):void  
{ 
      addChild (carga); 
      carga.name = "carga"+num/
      carga.addEventListener(MouseEvent.CLICK, onName)/
      carga.x += 45*num; //solo para q se cargue en una posición diferente 
      carga.y += 45*num;//solo para q se cargue en una posición diferente 
      num++ 
   } 
} 

¿por qué no va a funcionar? Pues, si nos fijamos, la variable "carga" está definida en la función "cargarsim", luego la función "mostrarsim" no sabe cuál es. Sé que la podríamos definir FUERA de la función, pero tendríamos el problema de si pulsáramos muy rápido el botón.
TODAS las funciones que controlan eventos de Flash tienen como argumento una variable de tipo Event (o de tipo MouseEvent si estamos manejando un evento de ratón)
Bien, si nuestra variable se llama "e"
e.target es quien recibió el evento. En un evento del tipo ENTER_FRAME o MOUSE_DOWN será el MC, en el caso que nos ocupa NO es "cargar", sino carga.contentLoaderInfo. No hay problema, podemos escribir

Código ActionScript :

function mostrarsim( e:Event):void  
{ 
      var carga:Loader=e.target.loader as Loader;
      addChild (carga); 
      carga.name = "carga"+num/
      carga.addEventListener(MouseEvent.CLICK, onName)/
      carga.x += 45*num; //solo para q se cargue en una posición diferente 
      carga.y += 45*num;//solo para q se cargue en una posición diferente 
      num++ 
   } 
} 

y ya está.
Fijémonos un poco en la línea

Código ActionScript :

 var carga:Loader=e.target.loader as Loader;

En primer lugar he usado el mismo nombre de variable "carga", pero podría haber usado cualquier otra. No tiene nada que ver esta con la anterior (de hecho la anterior en este momento no tiene valor)
Luego está eso de "as Loader". Si nos fijamos en la ayuda de Event (el enlace anterior) vemos que "target" es una variable de tipo "Objet"
¿qué quiere decir eso?
Pues que nos podemos referir a todas las propiedades que tenga, pero Flash NO sabe que es un MC, un Loader o un LoaderInfo. Así que somos nosostros los que se lo tenemos que decir. Eso es una "conversión de cast" y eso es eso tan extraño de "as Loader"
Por cierto, que podemos cargar el Loader completo o su contenido

Código ActionScript :

function mostrarsim( e:Event):void  
{ 
      var contenido:DisplayObject=e.target.content as DisplayObject;
      ...el resto igual, bueno, cambiamos carga por contenido...
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Feb 2011 05:26 pm
Muchas gracias por las respuestas.
Tengo que dedicarle un poco de tiempo para seguir todo el código y probarlo.
Gracias por el tiempo dedicado.

Por honsuales

23 de clabLevel



 

firefox

 

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