Foros del Web » Creando para Internet » Flash y Actionscript »

addChild sin tener que volver a declarar (migrando desde as2)

Estas en el tema de addChild sin tener que volver a declarar (migrando desde as2) en el foro de Flash y Actionscript en Foros del Web. Hola, Estoy pasando un proyecto que funcionaba bien en as2 a as3, me encuentro con que en as3 al cargar movieclips no puedo declarar y ...
  #1 (permalink)  
Antiguo 09/02/2010, 23:35
 
Fecha de Ingreso: septiembre-2009
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
addChild sin tener que volver a declarar (migrando desde as2)

Hola,
Estoy pasando un proyecto que funcionaba bien en as2 a as3, me encuentro con que en as3 al cargar movieclips no puedo declarar y luego cambiar los parametros del movieclip en diversas funciones que se activarian al clickar un boton.

quiero que :
si hago click en el boton 1 --> se cargue el movieclip en el contenedor
si hago click en el boton 2 --> el contenedor se vuelva invisible
si hago click en el boton 3 --> el contenedor se vuelva visible


codigo en as2:
Código:
function cargaclip(){
 contenedor.attachMovie( "mc1", "A1", 0, {_x:-75, _y:0});
}

function novisible(){
contenedor._visible = false;
}

function volvervisible(){
contenedor._visible = false;
}

boton1.onRelease = function(){
cargaclip();
}

boton2.onRelease = function(){
novisible();
}

boton3.onRelease = function(){
volvervisible();
}

El codigo en as3 que quiero conseguir y no funciona sería asi:

Código:
import flash.events.MouseEvent;

var contenedor:MovieClip = new mc1();
contenedor.x = 100;
contenedor.width = 112;
contenedor.height = 168;

function novisible(e:MouseEvent) : void{
contenedor.visible = false();
}

function volvervisible(e:MouseEvent) : void{
contenedor.visible = false();
}

function cargaclip(e:MouseEvent) : void{
 addChild(contenedor);
}

boton1.addEventListener(MouseEvent.CLICK, cargaclip);
boton2.addEventListener(MouseEvent.CLICK, novisible);
boton3.addEventListener(MouseEvent.CLICK, volvervisible);
Hay alguna manera de hacer esto?

Gracias.
  #2 (permalink)  
Antiguo 10/02/2010, 17:36
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: addChild sin tener que volver a declarar (migrando desde as2)

Ok, convengamos que el ATTACH MOVIE, ya no existe, lo velamos y enterramos.. a otra cosa mariposa.. o usas imagenes dentro del flash, o usas externas.. que es lo mejor

primero que nada, tendras tus imagenes en una carpeta externa, no se, con el nombre "images"

ahora el AS 3:
Código actionscript:
Ver original
  1. function cargaclip(event:MouseEvent) : void{
  2.  
  3. //traemos la url necesaria para la carga
  4. var miUrl:URLRequest = new URLRequest();
  5. miUrl.url="images/35.jpg";
  6.  
  7. //creamos el MC contenedor
  8. var contenedor:Loader = new Loader();
  9. //fijamos su posicion, que creo podras modificar
  10. contenedor.x= contenedor.y = 100;// que el valor de x, sea igual al de y
  11. //le decimos que cargue el archivo al contenedor
  12. contenedor.load(miUrl); //aqui carga la URL, este es el proceso correcto
  13.  
  14. addChild(contenedor);
  15. }
  16.  
  17. boton1.addEventListener(MouseEvent.CLICK, cargaclip);

lo demas si esta correcto

otra cosa.. no pongas (e:MouseEvent), pues es (event:MouseEvent)

si quieres traer varias, deberas usar XML con sus repectivos nodos

espero que a alguien le sirva tambien
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #3 (permalink)  
Antiguo 11/02/2010, 04:57
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 16 años, 5 meses
Puntos: 51
Respuesta: addChild sin tener que volver a declarar (migrando desde as2)

lo que tienes mal es visible = false() false no es una funcion por eso te da error y en la función volvervisible es true


Código PHP:
import flash.events.MouseEvent;

var 
contenedor:MovieClip = new mc1();
contenedor.100;
contenedor.width 112;
contenedor.height 168;

function 
novisible(e:MouseEvent) : void{
contenedor.visible false;
}

function 
volvervisible(e:MouseEvent) : void{
contenedor.visible true;
}

function 
cargaclip(e:MouseEvent) : void{
 
addChild(contenedor);
}

boton1.addEventListener(MouseEvent.CLICKcargaclip);
boton2.addEventListener(MouseEvent.CLICKnovisible);
boton3.addEventListener(MouseEvent.CLICKvolvervisible
por lo demás lo tienes bien XD


Para loncho_rojas el poner (e:MouseEvent) no influye ya que también es una variable la cual utilizas para la captura del evento, lo que si queda mas bonito poner event:MouseEvent XDXD

saludos
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #4 (permalink)  
Antiguo 11/02/2010, 08:23
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: addChild sin tener que volver a declarar (migrando desde as2)

Lynxcraft

Es lo lindo de la programacion AS 3.0.. tiene varias facetas... es cierto que no influye, mas, para que poner un parametro, si no lo vas a usar? Mejor poner lo correcto.

Lo importante es que tiene hay 2 versiones validas al respecto... ojala le saquen provecho!
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #5 (permalink)  
Antiguo 11/02/2010, 08:44
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 16 años, 5 meses
Puntos: 51
Respuesta: addChild sin tener que volver a declarar (migrando desde as2)

estoy de acuerdo contigo de poner las cosas como son es lo mejor para el orden en la programación XDXD saludos
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #6 (permalink)  
Antiguo 11/02/2010, 09:49
 
Fecha de Ingreso: septiembre-2009
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: addChild sin tener que volver a declarar (migrando desde as2)

Hola,

Gracias a todos por contestar,

loncho_rojas gracias, pero no estoy intentando mostrar una imagen sino un movieclip que está en el la libreria. Y no tengo problemas al cargarlo, pero si te fijas, en el ejemplo que me has puesto utilizas declaracion y carga en la misma funcion, yo quiero dividirlas en distintas funciones y es lo que mi cabeza no llega a entender como hacer.

(lo del visible es lo de menos, era un ejemplo para mostrar que no puedo crear un contenedor y luego modificar sus parametros en otra función.)

vale pongo un codigo valido ahora:


Código:
import flash.events.MouseEvent;

var contenedor:MovieClip = new mc1();
contenedor.x = 100;
contenedor.width = 112;
contenedor.height = 168;

function cargaclip(event:MouseEvent) : void{
 addChild(contenedor);
}

boton1.addEventListener(MouseEvent.CLICK, cargaclip);

como veis es correcto, pero solo me cargará el clip la primera vez que pulse el boton, si vuelvo a pulsar el boton ya no se carga.

para solucionar esto, tengo que meter la creacion del contenedor y sus parametros (lo que llamabamos la funcion "datos") dentro de la funcion "cargaclip" de esta manera:

Código:
import flash.events.MouseEvent;

function cargaclip(event:MouseEvent) : void{
 var contenedor:MovieClip = new mc1();
 contenedor.x = 100;
 contenedor.width = 112;
 contenedor.height = 168;
 addChild(contenedor);
}

boton1.addEventListener(MouseEvent.CLICK, cargaclip);
esto ultimo funciona pero es algo que no quiero hacer porque tengo muchos contenedores y botones y no quiero tener que volver a declarar cada vez que quiero que se cargue el movieclip "mc1", tambien por motivos de claridad al leer el codigo, quiero dividir en dos funciones, por un lado:

la declaración:

Código:
function datos(){
 var contenedor:MovieClip = new mc1();
 contenedor.x = 100;
 contenedor.width = 112;
 contenedor.height = 168;
}
por otro lado la carga:

Código:
function cargaclip(event:MouseEvent) : void{
 addChild(contenedor);
}

y por otro la modificacion de un parametro:

Código:
function volvervisible(event:MouseEvent) : void{
contenedor.visible = false();
}
y que funcionen tantas veces como veces presione el boton.

Se que lo que falla es algo que no me cabe en la cabeza, porque en as2 si se podia hacer y ahora en as3 ha de hacerse de otra forma mas correcta una vez entendida la logica.
He intentado poner que las variables sean public pero tampoco va,

quiero que la variable contenedor una vez declarada pueda modificarse en cualquier funcion.

Un saludo y gracias.

Última edición por solace33; 11/02/2010 a las 09:50 Razón: x
  #7 (permalink)  
Antiguo 11/02/2010, 11:35
Avatar de Eskombro  
Fecha de Ingreso: septiembre-2009
Ubicación: Colombia
Mensajes: 437
Antigüedad: 14 años, 7 meses
Puntos: 22
Respuesta: addChild sin tener que volver a declarar (migrando desde as2)

No entiendo muy bien. Claro, no hay ningún problema en hacer lo que dices, separarlo en distintas funciones y llamar a las diferentes funciones por separado. Eso no tienen ningún problema.

Por otra parte, en el primer código hay un error:

Código actionScript:
Ver original
  1. function novisible(e:MouseEvent) : void{
  2. contenedor.visible = false();
  3. }
  4.  
  5. function volvervisible(e:MouseEvent) : void{
  6. contenedor.visible = false();
  7. }

Para desaparecer el movieclip le dices lo mismo que para hacerlo visible.

.visible=false.

Debes poner

.visible=true

en "hacer visible".

Por otra parte claro que puedes declarar una sola vez, cargarlo, y con un botón, en una función separada, modificar sus propiedades cuantas veces quieras. Eso tampoco tiene ningún problema.

No sé por lo tanto, por donde va el problema que tienes. Dinos un poco más.

Saludos.
Eskombro
__________________
Blog AS3 Ideas -> Programación en ActionScript 3
________
Esk Games | Free online flash games
  #8 (permalink)  
Antiguo 11/02/2010, 12:25
 
Fecha de Ingreso: septiembre-2009
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: addChild sin tener que volver a declarar (migrando desde as2)

Hola,

Gracias Eskombro, ya está casi, al final lo de addChild me funciona y no se por que razón ayer no (estaré jodido de la cabeza), ahora el problema lo tengo con lo de contenedor.visible = false/true; cuando presiono los botones no pasa nada, ¿quizás he de importar algo para que funcione?

He cambiado el orden de los botones y los botones funcionan bien, el boton2 y 3 pueden llamar a la funcion cargaclip sin problemas, asi que es otra cosa.

el codigo de pruebas va asi:

Código:
import flash.events.MouseEvent;

var contenedor:MovieClip = new mc1();
contenedor.x = 100;
contenedor.width = 112;
contenedor.height = 168;
		
		
	function cargarclip(event:MouseEvent) : void
	{
		addChild(contenedor);
	}
	
	function novisible(event:MouseEvent) : void
	{
		contenedor.visible = false;
	}
	
		function volvervisible(event:MouseEvent) : void
	{
		contenedor.visible = true;
	}
	
	boton1.addEventListener(MouseEvent.CLICK, cargarclip);
	boton2.addEventListener(MouseEvent.CLICK, novisible);
	boton3.addEventListener(MouseEvent.CLICK, volvervisible);
Muchas gracias.
  #9 (permalink)  
Antiguo 11/02/2010, 12:34
Avatar de Eskombro  
Fecha de Ingreso: septiembre-2009
Ubicación: Colombia
Mensajes: 437
Antigüedad: 14 años, 7 meses
Puntos: 22
Respuesta: addChild sin tener que volver a declarar (migrando desde as2)

No. No tienes que importar nada para que funcione, pues el mismo flash te lo diría en un error: "no se encontró XXX o no es una constante en tiempo de compilación...". Prueba lo siguiente:

En vez de ".visible=false" pon ".alpha=0" y en vez de ".visible=true" usa ".alpha=1". A ver que sucede.

Otra cosa, dentro de cada función puedes poner un trace("Cualquier cosa"); para comprobar si el llamado de la función es correcto, y así ver si por ese lado va el problema.

Se me ocurre eso de momento,mientras sigo mirando el código, y no le veo ningún problema...

saludos nuevamente.
__________________
Blog AS3 Ideas -> Programación en ActionScript 3
________
Esk Games | Free online flash games
  #10 (permalink)  
Antiguo 11/02/2010, 12:52
 
Fecha de Ingreso: septiembre-2009
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: addChild sin tener que volver a declarar (migrando desde as2)

Gracias Eskombro, ya está solucionado,mi culpa: tenía dos frames en el timeline y el action en la primera por eso no funcionaba.

muchas gracias y perdona las molestias.

Un saludo.
  #11 (permalink)  
Antiguo 11/02/2010, 13:13
Avatar de Eskombro  
Fecha de Ingreso: septiembre-2009
Ubicación: Colombia
Mensajes: 437
Antigüedad: 14 años, 7 meses
Puntos: 22
Respuesta: addChild sin tener que volver a declarar (migrando desde as2)

No hay molestias. Buena noticia que este funcionando!
__________________
Blog AS3 Ideas -> Programación en ActionScript 3
________
Esk Games | Free online flash games

Etiquetas: addchild, declarar, volver
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:02.