Comunidad de diseño web y desarrollo en internet online

problema con carga de swf

Citar            
MensajeEscrito el 24 Jun 2008 05:48 pm
Hola, estoy intentando cargar un swf compilado con flash9 con 5 fotogramas "peli2.swf", para ello tengo este codigo:

Código :

var request:URLRequest = new URLRequest("peli2.swf");
   var carga:Loader = new Loader();
   carga.load(request);

   var miMC:MovieClip= new MovieClip();
   miMC.addChild(carga);

   trace(miMC.totalFrames);
   addChild(nave);


El problema que tengo es que solo me carga 1 frame de los 5 que tiene.... ¿en que me estoy equivocando?

GRACIAS

Por rau1sfx

26 de clabLevel



 

aqui

firefox
Citar            
MensajeEscrito el 24 Jun 2008 06:50 pm
Ja, es que "nave" no se sabe de dónde vino volando.
Sólo sustituye:

Código :

addChild(nave);

por:

Código :

addChild(miMC);

Por vuh

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Jun 2008 06:52 pm
Esto te sucede porque miMC en realidad tiene 1 solo frame, lo que estás haciendo en este momento es que cargas tu película dentro de un objeto loader y a su vez este lo insertas en un MovieClip (miMC) por lo tanto si quieres saber cuantos frames tiene tu película cargada no puedes acceder a las propiedades de miMC.

Si el movie que estás tratando de leer está en AS3, lo correcto sería lo siguiente:

Código :

var request:URLRequest = new URLRequest("peli2.swf");

var carga:Loader = new Loader();
carga.load(request);
addChild(carga).name = "carga"

carga.contentLoaderInfo.addEventListener(Event.COMPLETE, traceTotalFrames);

function traceTotalFrames(evt:Event):void{
   
   var loadedSWF:MovieClip = MovieClip(carga.content);
   trace(loadedSWF.totalFrames);
   
}


Ahora si el movie que quieres leer está en AS1 o AS2 se complica la cosa

Código :

var request:URLRequest = new URLRequest("peli2.swf");

var carga:Loader = new Loader();
carga.load(request);
addChild(carga).name = "carga"

carga.contentLoaderInfo.addEventListener(Event.COMPLETE, traceTotalFrames);

function traceTotalFrames(evt:Event):void{
   
   var loadedSWF:AVM1Movie = AVM1Movie(carga.content);
   
}


Aquí ocurriría un problema y es que puedes saber su ancho, su alto, sus filtros, pero lamentablemente desde AS3 no se puede controlar un objeto AVM1Movie es decir play(), stop(), totalFrames, etc, por lo que tendrías que recurrir a una local connection entre los dos para que el movie en AS1 o AS2 le envíe la cantidad de frames que el tiene al movie en AS3.

Saludos

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 25 Jun 2008 04:14 pm
Gracias por vuestra respuesta.

vuh, efectivamente me habia equivocado al transcribirlo.
elchininet, tu codigo realmente me devuelve el numero de frames que tiene el swf cargado, pero mi intencion no es simplemente ver el numero de frames cargados, sino acceder a cada uno para mostrar una imagen distinta por cada tecla pulsada. El problema es que solo me muestra una sola imagen de las 5 que tiene el swf cargado (aunque me dice que tiene 5 frames), y no funcionan las funciones gotoAndStop, etc..

Me explico, se trata de un juego de naves en el que todas las imagenes de la nave principal las quiero cargar desde un swf externo. Si el usuario pulsa izquierda, pues se iria al frame que contiene la imagen de la nave desplazandose a la izquierda, y asi con todos los movimientos.
No se si esta es la forma correcta de hacerlo, si se os ocurre alguna mejor decidmela, pero debe de cargarlo de un archivo externo porque la imagen de la nave protagonista puede ir variando, añadiendose nuevas naves con el tiempo..

SALUDOS! Riendo

Por rau1sfx

26 de clabLevel



 

aqui

firefox
Citar            
MensajeEscrito el 25 Jun 2008 06:11 pm
Recuerda que el SWF cargado debe estar en AS3, aquí te dejo un ejemplo de carga del SWF con 5 frames que en cada uno hay una imagen distinta, cuando termina de cargar se le pone stop y se crea un evento en stage que al presionar los números del 1 al 5 el SWF cargado irá al respectivo frame.

Código :

var request:URLRequest = new URLRequest("peli.swf");

var carga:Loader = new Loader();
var loadedSWF:MovieClip;

carga.load(request);

addChild(carga).name = "carga"

carga.contentLoaderInfo.addEventListener(Event.COMPLETE, traceTotalFrames);

function traceTotalFrames(evt:Event):void{   

   loadedSWF = MovieClip(carga.content);

   loadedSWF.stop();
   
   stage.addEventListener(KeyboardEvent.KEY_DOWN, gotoFrame);

}

function gotoFrame(evt:KeyboardEvent):void{
   
   if(Number(evt.keyCode) - 48 >= 1 && Number(evt.keyCode) - 48 <= loadedSWF.totalFrames){
      
      loadedSWF.gotoAndStop(Number(evt.keyCode) - 48);
      
   }
   
}


De todas maneras me parece que la mejor solución para lo que quieres hacer es leer las imágenes de la nave al principio y dejarlas fuera de la escena y después depende de la tecla que presione el usuario hacer un clone del bitmap correspondiente y mostrarlo, de esta manera si se quisiera actualizar alguna imagen se actualizaría solamente la que hiciera falta y no se tendría que volver a compilar un SWF nuevo. Pero bueno la solución que te puse funciona. Recuerda que el SWF leido tiene que estar en AS3.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 25 Jun 2008 06:45 pm
wow, funciona perfectamente, muchisimas gracias elchininet, ya he comprendido el concepto: hay que actuar siempre sobre el objeto cargado, no sobre el que ya tenias y al cual se le añade como hijo el objeto que se carga, ese era el fallo que yo tenia!, ahora a seguir currando...

chauuu

Por rau1sfx

26 de clabLevel



 

aqui

firefox
Citar            
MensajeEscrito el 24 Jul 2012 05:26 pm
Hola saludos, espero que le tema aun siga activo, he probado varias veces el código que cuenta la cantidad de frames y me da le resultado 2 cuando el swf en cuestión contiene 5855.

Por dashbandith

0 de clabLevel



 

safari

 

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