FLASH - cargar varios SWF en secuencia

ZeN<Guardian>

Lanero Reconocido
17 Abr 2001
4,235
Qué tal señores y señoritas,

Espero haya por aquí algun habilidoso para programar en Flash y me pueda ayudar con esto:

Ok, estoy haciendo un trabajo en el que tengo 2 SWFs y necesito ponerlos a correr el uno después del otro.

Ahora bien, muchos dirán: pues hacés una sola animación y listo, doble click y ya. Pues no. El hacer eso así es muy peligroso porque me le como todos los recursos al computador en el que esté corriendo la animación; de hecho me pasó una vez, en donde en la escena X algunas veces el sonido se iba y no había manera de que regresara sin reiniciar la animación.

No aplica el uso de botones para la carga de las animaciones ya que no quiero usar ese método. La presentación va a correr por sí sola durante todo el día una vez le hagan doble click antes de la reunión.

Mi idea es poder restarle carga al PC en el que corra la presentación, de manera que cargue solamente lo que va a usar y una vez usado, lo libere y cargue la nueva animación.

Creo que es algo sencillo como:
Código:
on () {
	loadMovie("flash-presentation.swf", "_root.placeHolder");
}

...pero como no soy programador, no sé cómo escribir nada de eso.

Muchas gracias a quienes me puedan ayudar.

Zuertex
 
guardian, yo no lo hago en flash directamente pero lo hago en SWISHMAX y la idea es que puedes generar dos "escenas" en la cual cada uno tiene su tiempo y su condiciones especiales (musica, efectos, etc) luego generas un solo swf, pero se puede determinar que una vez cargada la escena y usada simplemente se "unload", como cuando uno quiere programar los contadores de porcentaje con los comando "if" frame # load then "play".... algo asi se me ocurre.


como te digo, lo he hecho en swishmax que soporta flash bajo swf no .fla.
 
Hola.
Pues la cosa tiene varias soluciones mmmm
1. 3 archivos:
--- archivo 1: Controlador, no tiene nada, tal vez solo el fondo de tu presentacion y un codigo que haga de controlador de escena para manejar las cargas de los archivos.
--- archivo 2: tu primer swf (1.swf para efectos practicos) donde colocas algo al final de la linea de tiempo principal como: fin = true;
--- archivo 3: tu segundo swf (2.sw).

en el controlador puedes hacer lo siguiente:
en la linea principal de tiempo coloca:
loadMovieNum ( "path/1.swf", 5 ); // 5 es el nivel de la carga, lo puedes cambiar.

id = setInterval ( "controlar", 100 ); // esto crea un timer que se ejecutara cada 100 milisegundos (creo), lo puedes cambiar tambien para que sea mas rapido o mas lento.

function controlador ()
{
if ( _level5.fin )
{
unloadMovieNum ( 5 );
loadMovieNum ( "2.swf", 5 ); // con esta instruccion basta por que ella descarga y luego carga asi que te ahorras la linea anterior.
clearInterval ( id );
}
}

Explicacion:
como en 1.swf al final del archivo has colocado una variable llamada "fin" con el valor "true", tons cuando tu animacion termine la variable va a existir y se puede utilizar para saber cuando se ha terminado la ejecucion de la animacion para descargarla y luego cargar la otra. Para invocar variables de ese swf, solo tienes que llamar primero el nivel donde esta y luego la variable asi: _level5.fin y por eso funciona.

Bueno, esta no es la forma elegante pero funciona. Si quieres algo realmente bueno tienes dos opciones que son:
1. Utiliza la clase LoadMovieClip de flash, es algo supremamente sencillo de utilizar, te ahorras la movie vacia (la que hace el control y tiene todo el codigo) y es mas eficiente.
2. Utiliza SMA xD, un estandar para desarrollo de multimedias, la direccion es: "http://sma.diensoft.org", ahi encontraras un demo y las sources para descargar, es un desarrollo GPL y te facilita este tipo de trabajos (utiliza LoadMovieClip por debajo pero tu solo invocas una funcion sencilla ).
 
Gracias señores,

Bueno, por el lado de Kike veo que el conocido SWISH ya es un genérico de la compañía y lo nombraron SWISHmax, lo he usado antes, tremendo software.

Pero desafortunadamente no me sirve porque igual tengo que ponerle código para que haga lo que quiero y es eso lo que precisamente no sé hacer, tirar código.

De otro lado, estuve intentando la ayuda de hell await con mejores resultados pero falta un pelo para lograrlo.

hell await, puse a correr la animación pero no me carga la animación 2, se me queda corriendo la 1 en loop.

Lo que hice fue colocar en el primer frame del archivo "base" que es sobre el que corren las otras dos animaciones, esto:

Código:
loadMovieNum ( "bola1.swf", 5 ); // 5 es el nivel de la carga, lo puedes cambiar.
id = setInterval ( "controlar", 100 ); // esto crea un timer que se ejecutara cada 100 milisegundos (creo), lo puedes cambiar tambien para que sea mas rapido o mas lento.
function controlador ()
{
if ( _level5.fin )
{
unloadMovieNum ( 5 );
loadMovieNum ( "bola2.swf", 5 ); // con esta instruccion basta por que ella descarga y luego carga asi que te ahorras la linea anterior.
clearInterval ( id );
}
}

No se si haya que crear un Movie Clip y ponerle eso o que.

Estoy seguro que ya casi le pegamos pero falta un pelo.

Gracias a ambos.
 
Si entendi bien que es lo que queres lograr, creas una pelicula vacia, y en un keyframe le pones un load movie por decir en el nivel 1, y en la primera animación que carga pones un keyframe al final, y le haces un load movie a la otra pelicula, que cargue en el mismo nivel, entonces en el momento de que la animación inicial llegue al final, te carga la otra inmediatamente y te tumba la inicial.

Contame si te funciona.

Suerte
 
YES!

Este franco se fajó, ésa es la solución 110% que necesitaba, un amigo, que de hecho fue alumno mío y que hoy me demostró que me ha superado, me ayudó con el código y es exactamente como lo describe franco.

Aquí les pongo el código para que lo tengan:

Frame 1, película base:
Código:
valor = 1;
loadMovie("esa1.swf", loaderZea);

Poner un Movie Clip en esa misma película llamado:
"loaderZea"

En el último frame de la primer película, ponen:
Código:
_root.loaderZea.loadMovie("esa2.swf");

Y en el útimo frame de la segunda película, ponen:
Código:
_root.loaderZea.loadMovie("esa1.swf");

Si le quieren añadir más, sigan la lógica de las sintaxis.

Gracias a Andrés Acosta, el man que me pasó el código. Su empresa se llama 9grados

Zuertex :)
 

Los últimos temas