Comunidad de diseño web y desarrollo en internet online

¿Cómo controlar una movie cargada con loader?

Citar            
MensajeEscrito el 23 Dic 2008 07:42 pm
Buenas, aquí ando liado con una cosa que era super sencilla en AS2, pero no lo ocnsigo en AS3. A ver si me podéis echar una mano, por favor.

Tendos dos swf: uno es home.swf, donde se carga 01.swf

01.swf tiene dos fotogramas.

En home.swf he puesto esto:

// creo el clip contenedor
var contenedor:MovieClip = new MovieClip();
// creo el loader
var loader:Loader = new Loader();
loader.load(new URLRequest("01.swf"));

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, insertMovie);

function insertMovie(evt:Event):void{

addChild(contenedor).name = "contenedor";
contenedor.addChild(loader).name = "peli";

contenedor.x = 10;
contenedor.y = 10;

}
// y aquí el script del botón
boton.buttonMode=true;

boton.addEventListener(MouseEvent.CLICK, Click);
function Click(evt:MouseEvent) {
contenedor.peli.gotoAndStop(2);
}

Y no hay manera. Lo que quiero es que desde el botón que hay en home.swf, al clicarlo la pelicula cargado, es decir, 01.swf me vaya al frame 2.

A ver si me podéis decir qué hago mal !! jejeje

Thanks :D

Por mateo

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Dic 2008 07:59 pm
Hola!1....prueba cambiando esta linea:

Código :

contenedor.addChild(loader.content).name = "peli";

Con eso ya le puedes dar play:

Código :

contenedor.peli.gotoAndStop(2);

No estoy seguro pero quiza te lanze un error al usarlo asi, en caso de que falle prueba esto:

Código :

var obj=contenedor.getChildAt(0);
obj.gotoAndStop(2);


Espero te funcione.

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Dic 2008 08:15 pm

Angel Roberto escribió:

Hola!1....prueba cambiando esta linea:

Código :

contenedor.addChild(loader.content).name = "peli";

Con eso ya le puedes dar play:

Código :

contenedor.peli.gotoAndStop(2);

No estoy seguro pero quiza te lanze un error al usarlo asi, en caso de que falle prueba esto:

Código :

var obj=contenedor.getChildAt(0);
obj.gotoAndStop(2);


Espero te funcione.
Gracias Angel, pero sigue sin funcionar, ni de una forma ni de otra.
Al poner: contenedor.addChild(loader.content).name = "peli"; me da este error: Error #2078: No se puede modificar el nombre de propiedad de un objeto colocado en la línea de tiempo.

Y con el segundo método al clicar en el botón me da este error: Error #1065: No se ha definido la variable obj.

Buff, que complicado es esto del AS3 :D

Lo que quiero hacer es una botonera que cada botón me cargue un swf diferente, pero que cuando un swf esté cargado y clque en otro botón para cargar otro swf no me aparezca éste de golpe, sino que el anterior desaparezca con fade o que avance en la linea de tiempo.

A lo mejor me estoy liando demasiado y esto se puede hacer de otra forma más sencilla, no sé. Se te ocurre algo,

Gracias de antemano,

Mateo

Por mateo

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Dic 2008 10:31 pm
Quitale el .name al addChild() deja simplemente contenedor.addChild(loader.content);

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Dic 2008 10:35 pm
El segundo error no se porque te lo marque, yo tengo una pelicula donde pongo ese codigo y me funciona bien si le pusiste "var obj" sin el var te dira que obj no existe.....si posteas algo de codigo sera mas facil supongo que el fade lo haces sobre el contenedor o es alguna animacion en cada swf??

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Dic 2008 10:44 pm
Hola Ángel,

Ya me funciona :D

Al final, como me decías el script que he puesto en home.swf es éste:

var contenedor:MovieClip = new MovieClip();
var loader:Loader = new Loader();
loader.load(new URLRequest("01.swf"));

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, insertMovie);

function insertMovie(evt:Event):void {

addChild(contenedor).name="contenedor";
contenedor.addChild(loader.content);

contenedor.x=10;
contenedor.y=10;
}

boton5.buttonMode=true;

boton5.addEventListener(MouseEvent.CLICK, Click);
function Click(evt:MouseEvent) {
var obj=contenedor.getChildAt(0);
obj.gotoAndStop(2);
}

Muchísimas gracias.
A ver si poco a poco voy practicando, jejeje!!

mateo

Por mateo

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Dic 2008 10:50 pm
Que bueno que ya te funcione Mateo :)

Estamos para ayudar!! Animo y a programar. :lol:

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Dic 2008 06:47 pm
Buenas Ángel,

Perdona que te moleste de nuevo :D
Tu script funciona bien. El problema que me ha aparecido ahora es que la pelicula que se carga (01.swf) lo hace a través de un preload.
Es decir, home.swf carga una pelicula que se llama cargador01.swf y ésta es la que llama a 01.swf. Y ya tengo otra vez el problema de las rutas, no consigo llegar a 01.swf

El código de cargador01.swf es éste:

//Importo las clases necesarias
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLRequest;

//Asigno la url que se va a cargar
var url:String = "01.swf";

//Carga la imagen
function CargarFoto() {
//Creo el objeto cargador
var loader:Loader = new Loader();
//Le añado los listeners
ponerListeners(loader.contentLoaderInfo);
//Creo el objeto que contendrá la petición
var peticion:URLRequest = new URLRequest(url);
//Cargo la petición
loader.load(peticion);
}

//Añade los listeners al cargador
function ponerListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
dispatcher.addEventListener(Event.INIT, initHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
}

//Funcion que se ejecuta cuando termina la descarga.
function completeHandler(event:Event):void {
//trace("completeHandler: " + event);
addChild(event.target.content);
}

//Se ejecuta al recibir un código de estado HTTP
function httpStatusHandler(event:HTTPStatusEvent):void {
//trace("httpStatusHandler: " + event);
}

//Se distribuye cuando las propiedades del objeto cargado están disponibles
//A partir de su distribucion podriamos modificar el objeto (ancho, escala, etc)
function initHandler(event:Event):void {
//trace("initHandler: " + event);
}

//Se ejecuta cuando hay un error de entrada/salida, por ejemplo, al intentar cargar un
//archivo inexistente
function ioErrorHandler(event:IOErrorEvent):void {
//trace("ioErrorHandler: " + event);
}

//Se ejecuta cuando comienza la operación de carga
function openHandler(event:Event):void {
//trace("openHandler: " + event);
}

//Se ejecuta periodicamente mientras dura la carga
function progressHandler(event:ProgressEvent):void {
trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
var carga:Number=event.bytesLoaded;
var total:Number=event.bytesTotal;
var cargados:Number=Math.floor((carga*100)/total);
numero.text=String(Math.round(cargados));
}
//Empezamos
CargarFoto();

A ver si me puedes echar una mano porque ahora la linea obj.gotoAndStop(2); se dirije al cargador01, pero no al 01.swf !!!

Ufff... que lio

Por mateo

3 de clabLevel



 

firefox

 

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