Planteo este problemón, porque no sé si es que me falta por aprender algo, pero creo que estoy pidiendo algo imposible en Flash tal y como están las cosas.
Tengo el siguiente código fuente:
En AS 2.0 tengo esto: http://www.monomola.com/imagenes/cargadorAS2.fla (CS3, AS2, Flash Player 9)
Que genera esto:
http://www.monomola.com/imagenes/cargadorAS2.swf (a este swf te dejo un link, ya verás porqué)
Básicamente lo que hace es:
Código ActionScript :
loadMovie("http://www.monomola.com/imagenes/trololoroloAS2.swf", contenedor2_mc);
loadMovie("http://instantsfun.es/swf/trollolol.swf", contenedor2e_mc);
loadMovie("http://www.monomola.com/imagenes/trololoroloAS3.swf", contenedor3_mc);Y en AS 3.0 tengo: http://www.monomola.com/imagenes/cargadorAS3.fla
Que genera esto:
http://www.monomola.com/imagenes/cargadorAS3.swf
Y básicamente hace lo mismo, implementando la función en ActionScript 3.0:
Código ActionScript :
function loadMovie(direccion:String, donde:DisplayObject):void {
var request:URLRequest = new URLRequest(direccion);
var loaderser:Loader = new Loader();
loaderser.load(request);
donde["addChild"](loaderser);
}En ambas películas se carga en la fila de arriba en AS2 y AS3 respectivamente http://www.monomola.com/imagenes/trololoroloAS2.swf y http://www.monomola.com/imagenes/trololoroloAS3.swf y en la fila de abajo http://instantsfun.es/swf/trollolol.swf (también en AS2.0).
El resultado ya se puede ver: en AS2.0 carga bien los swf que están en AS2.0, pero los que están en AS3.0 los carga sin hacer caso de la programación, y sonando. Lo que sí que hace es parar cuando desaparece el clip donde cargó el swf, y al volver a ponerlo, vuelve a comenzar.
En el AS3.0 carga bien todos los swf, los tres, pero tiene un problema: cuando llega al último fotograma, en el que deberían descargarse los clips, éstos siguen sonando (si se presiona el botón). Si fuera un streaming, seguiría cargando, y si fuera lo que fuera, seguiría ahí.
Como ya se explicó en foros.cristalab.com/cargar-as3-dentro-de-as2-es-posible-t64738, eso se podría solucionar haciendo que el archivo en AS2.0 cargue en el nivel 0 el AS3.0; y funciona. Pero el problema es que ese AS2.0 (el cargador) debería cargarse en un index (en AS3.0) superior, y en este caso ya no funciona, no recarga el nivel.
¿Alguien sabe algo?
En la documentación oficial de AS3.0 (que es el lenguaje sobre el que funciona todo esto) habla sobre la clase LOADER, en http://livedocs.adobe.com/flash/9.0_es/ActionScriptLangRefV3/flash/display/Loader.html, y en especial, del método el unload():
Adobe escribió:
public function unload():void
Versión del lenguaje: ActionScript 3.0
Versión del reproductor: Flash Player 9
Elimina un elemento secundario del objeto Loader que se cargó utilizando el método load(). El elemento property (propiedad) del objeto LoaderInfo asociado se restablece con el valor null. El elemento secundario no se destruye necesariamente, ya que otros objetos pueden contener referencias a él; sin embargo, deja de ser elemento secundario del objeto Loader.
La práctica más recomendable consiste en cerrar explícitamente los flujos de los objetos de un archivo SWF secundario como, por ejemplo, los objetos LocalConnection, NetConnection, NetStream y Sound, antes de descargar dicho archivo SWF secundario. En caso contrario, podría continuar reproduciéndose el sonido del archivo SWF secundario aunque se hubiera descargado el archivo SWF secundario. Para cerrar los flujos del archivo SWF secundario, añada un detector de eventos al elemento secundario que detecte el evento unload. Cuando el elemento principal llame a Loader.unload(), se distribuirá el evento unload al elemento secundario. En el ejemplo siguiente, se muestra cómo puede lograr esto:
Código ActionScript :
function closeAllStreams(evt:Event) {
myNetStream.close();
mySound.close();
myNetConnection.close();
myLocalConnection.close();
}
myMovieClip.loaderInfo.addEventListener(Event.UNLOAD, closeAllStreams);
Y esa última opción no es posible: los SWF que voy a cargar están programados por terceros, y no tienen muy a mano esos métodos.
Por último, para minorizar un poco este problema, se podría recurir al método
Código ActionScript :
SoundMixer.stopAll();
Pero no sirve: mientras haciendo esto al cerrar el "cargador", es necesario que otros clips que estén sonando continúen haciéndolo.
Espero alguna respuesta.
Atentamente.
