Problema con "getChildByName" y eliminar película externa
Hola!
Tengo una duda a la hora de cargar un .swf y que me borre el anterior. Con el código que pongo a continuación, se sobreescribe "mipelicula2" encima de "mipelicula1", de tal manera que no me borra la que tengo debajo.
En cada "mipelicula" tengo un boton para cargar la siguiente( con el tipico boton de siguiente), y lo hago con este código:
var loader:Loader=new Loader()
addChild(loader).name="loader";
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, insertMovie);
boton1.addEventListener(MouseEvent.CLICK,botonPulsado)
function botonPulsado(e:MouseEvent){
loader.load(new URLRequest("mipelicula2.swf"));
}
function insertMovie(evt:Event):void{
var tmp_loader:Loader=getChildByName("loader") as Loader
if (tmp_loader!=null){
removeChild(tmp_loader)
}
addChild(loader).name="loader";
}
¿Cómo puedo hacer para ir cargando y que se me vayan eliminando la que se está viendo justo antes? Gracias!
abrandlincoln
que bonito es ver posts con código insertado, es lo que le falta a Domestika!
(no uso as pero es curioso ver como se hacen las cosas)
kurkep
Gracias! al final conseguí solucionar el problema, aunque poniendo container.addChild(contendor) me daba otro fallo. 1000 gracias de nuevo
matmac Profesor Plus
El error esta en el container.addChildAt(contenedor);
Debería ser: container.addChild(contenedor);
kurkep
He probado varias cosas, porque realmente no lo tengo claro, asique he intentado "limpiar" el SWF.
En mi "studio1.swf", he insertado un MC con nombre de instancia container, en el frame 5, al igual q el codigo: container.addChild(contenedor) en una capa superior.
Mi boton para cargar "studio2" aparece mas adelante, con el codigo:
var i:Number = 1
var contenedor = new Loader();
contenedor.load(new URLRequest("studio"+i+".swf"));
contenedor.name="loader";
container.addChildAt(contenedor);
botSiguiente.addEventListener(MouseEvent.CLICK, cargaNuevaPeli)
function cargaNuevaPeli (e:MouseEvent) {
container.removeChildAt(0)
i=i+1
var miPeli = new Loader();
miPeli.load(new URLRequest("studio"+i+".swf"));
container.addChild(miPeli) ;
}
Y el error que me sale es:
1136: Número de argumentos incorrecto. Se esperaba 2.
A que se debe? gracias!
matmac Profesor Plus
Luego puedes añadir un condicional IF cuando llegues al máximo de pelis que quieres cargar, dentro de ese condicional puedes resetear las variables y cargar nuevamente la primera peli.
matmac Profesor Plus
Tienes que meter un MovieClip con nombre de instancia "container", en la línea 4 pon --> container.addChild(contenedor) por ejemplo, entonces a tu botón le añades un eventListener con la función para remover la peli de ese nivel, sería algo como:
var i:Number = 1
var contenedor = new Loader();
contenedor.load(new URLRequest("mipelicula"+i+".swf"));
contenedor.name="loader";
container.addChildAt(contenedor) ;
botSiguiente.addEventListener(MouseEvent.CLICK, cargaNuevaPeli)
function cargaNuevaPeli (e:MouseEvent) {
container.removeChildAt(0)
i=i+1
var miPeli = new Loader();
miPeli.load(new URLRequest("mipelicula"+i+".swf"));
container.addChild(miPeli) ;
}
kurkep
Me pilló un proyecto a medio hacer con as2, y al tener q terminarlo en as3..me he visto un poco apurado, por eso pido disculpas antes de nada. Tenia los archivos diseñados "como antes", es decir, para cargar cada "mipelicula", en el nivel 1, utilizaba capas guia. De tal modo que ya tenia la posicion donde cargarlo. Ademas, en este nivel aparece ese boton de "siguiente", por eso ahora me pierdo cuando dices que este fuera del contenedor
Ahora entiendo que se manejan los SWF externos de otra manera, por eso no se si el problema esta en la forma que esta diseñado, por si tuviera que rehacerlos.
Te cuento:
En SWF principal, la linea de tiempo carga automaticamente con este codigo:
var contenedor = new Loader();
contenedor.load(new URLRequest("mipelicula1.swf"));
contenedor.name="loader";
addChild(contenedor) ;
Y al cargar "mipelicula1", el codigo que puse arriba.
Donde pondria el:
holder.removeChildAt(0);
Estoy bastante perdido, gracias por tu ayuda.
matmac Profesor Plus
para poder hacer eso debes volver a la ruta principal y decirle al contenedor que elimine el elemento con por ejemplo holder.removeChildAt(0);
Igualmente no veo tu código funcionalmente correcto, los botones de siguiente deben estar fuera de tu contenedor y por lo que veo no tienes un contenedor sino que cargas los SWF a pelo en el escenario, deberías crear un contenedor.
Otra opción que veo es que cuando añades el elemento lo añadas a cierto nivel por ejemplo addChildAt(10), de esa manera puedes deshacerte del elemento con removeChildAt(10) aunque si el elemento que estas quitando es el que añade el otro no creo que funcione.
Espero que te sirva.