Lo primero que hay que saber es que hay 2 métodos para cargar un SWF externo.
1.- loadMovie
2.- loadMovieNum
Parecen similares, pero creanme, son diferentes. Aqui los detalles.
loadMovie
Permite cargar un SWF externo dentro de un MovieClip, así de simple no le veo mayor complicación.
Código:
Ahora supongamos que queremos acomodar "ball.swf" dentro de nuestra película principal en determinada posición. this.loadMovie("ball.swf")
Lo que tenemos que hacer es:
Crear un MovieClip vació acomodar ese MovieClip en las coordenadas que queramos y después cargar nuestro SWF dentro del MovieClip.
Código:
Simple cierto.clip_mc = this.createEmptyMovieClip("holder", 1); clip_mc._x = 100; clip_mc._y = 100 clip_mc.loadMovie("ball.swf")
loadMovieNum
Permite cargar un SWF externo en un nivel específico de la línea de tiempo en la que se realiza la acción
Código:
La limitante de este método es que no podemos acomodar el contenido mediante código.loadMovieNum("ball.swf", 10);
Como siempre se pueden usar las rutas RELATIVAS para cargar un SWF en algún clip superior o inferior a la línea de tiempo donde estemos trabajando
Código:
Otra pregunta muy típica es como puedo ir a un frame X dentro de un SWF que cargo._parent.loadMovieNum("ball.swf", 10); this.clip_mc.loadMovieNum("ball.swf", 10);
Esto es simple poniendo un Preeload simple, para saber si ya esta cargado nuestro SWF y así poder ir a dicho frame, El error mas común es este
Código:
Esto no funciona, por la simple razón de que la acción clip_mc.gotoAndPlay(20); se ejecuta mucho antes de que nuestro SWF haya sido cargado en su totalidad.clip_mc = this.createEmptyMovieClip("holder", 1); clip_mc.loadMovie("ball.swf") clip_mc.gotoAndPlay(20);
Queremos ir al frame 20 cuando aun dicho frame no esta disponible.
El código correcto seria:
Código:
Hacemos una precarga y cuando este cargado nuestro SWF en su totalidad hacemos el gotoAndPlay. clip_mc = this.createEmptyMovieClip("holder", 1); clip_mc.loadMovie("ball.swf"); this.onEnterFrame = function() { if (clip_mc.getBytesLoaded() != 0 && clip_mc.getBytesLoaded() == clip_mc.getBytesTotal()) { trace("cargo"); clip_mc.gotoAndPlay(20); delete this.onEnterFrame; } };
Ahora cuando cargamos un SWF y queremos asignarle una acción de Mouse por que no funciona?
Cuando hacemos un loadMovie dentro de un Clip este Clip pierde sus acciones de Mouse, onRelease, onPress, onRollOver etc. etc.
La solución a este problema es crear 2 MovieClips anidados y cargar nuestro SWF dentro del segundo MovieClip para poder asignarle las acciones al Primer MovieClip, ¿Me explico?
Aquí el código
Código:
Estos son los conceptos básicos para trabajar con SWF externos y loadMovie, Yo no aconsejo trabajar con loadMovieNum, no me gusta pero esto es gusto personal.clip_mc = this.createEmptyMovieClip("holder", 1); son_mc = clip_mc.createEmptyMovieClip("holder2", 1); son_mc.loadMovie("ball.swf"); clip_mc.onRelease = function() { trace("Yeap, Funciona"); };
Para terminar siempre hay preguntas tipo "Tengo un SWF que funciona bien solo, pero cuando lo cargo con loadMovie no funciona"
Esto es simplemente por que están usando rutas ABSOLUTAS, con rutas absolutas me refiero a _root
por ejemplo tenemos un SWF que lo que hace es: cuando presionamos un botón ponemos un mensaje en un campo dinámico el error mas común es:
Código:
Esto funciona solo y solo si cuando la película es ejecutado sola. ya que tenemos esta estructuraball_mc.onRelease = function() { _root.mi_txt.text = "Hola"; };
Código:
Pero que pasa cuando cargamos este SWF en otra película por ejemplo usando esto:|-_root |-mi_txt
Código:
Deja de funcionar ya que las rutas cambiaron ahora las rutas sonclip_mc = this.createEmptyMovieClip("holder", 1); clip_mc.loadMovie("ball.swf")
Código:
Entonces el código esta tratando de asignar un texto al campo mi_txt que se encuentra en el _root pero como la ruta ABSOLUTA cambio no funciona.|-_root |-clip_mc |-mi_txt
La solución es usar rutas RELATIVAS
Código:
this se refiere al Botón _parent se refiere a la línea de tiempo donde esta el botón que es la misma línea de tiempo donde se encuentra nuestro campo de textoball_mc.onRelease = function() { this._parent.mi_txt.text = "Hola"; };
y así no importa donde pongamos nuestro SWF siempre funcionara.
Con esto espero no ver mas preguntas sobre loadMovie en el Foro.
PD. Por favor si quieren hacer preguntas sobre este tema haganlo abriendo un nuevo post en el foro de Flash, no en este "Recuros".. gracias
Saludos!!