Foros del Web » Creando para Internet » Flash y Actionscript »

LoadMovie

Estas en el tema de LoadMovie en el foro de Flash y Actionscript en Foros del Web. Esto es algo súper básico, pero últimamente, cada vez que entro a los foros me encuentro con preguntas de loadMovie: "No me funciona", "esta maldito ...
  #1 (permalink)  
Antiguo 17/03/2005, 10:41
Avatar de TMeister
Crazy Coder
 
Fecha de Ingreso: enero-2002
Ubicación: En la Oficina
Mensajes: 2.880
Antigüedad: 22 años, 11 meses
Puntos: 193
LoadMovie

Esto es algo súper básico, pero últimamente, cada vez que entro a los foros me encuentro con preguntas de loadMovie: "No me funciona", "esta maldito loadMovie" "no se como.." blablabla..

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:
this.loadMovie("ball.swf")
Ahora supongamos que queremos acomodar "ball.swf" dentro de nuestra película principal en determinada posición.

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:
clip_mc = this.createEmptyMovieClip("holder", 1);
clip_mc._x = 100;
clip_mc._y = 100
clip_mc.loadMovie("ball.swf")
Simple cierto.

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:
loadMovieNum("ball.swf", 10);
La limitante de este método es que no podemos acomodar el contenido mediante código.

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:
_parent.loadMovieNum("ball.swf", 10);

this.clip_mc.loadMovieNum("ball.swf", 10);
Otra pregunta muy típica es como puedo ir a un frame X dentro de un SWF que cargo.

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:
clip_mc = this.createEmptyMovieClip("holder", 1);
clip_mc.loadMovie("ball.swf")
clip_mc.gotoAndPlay(20);
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.
Queremos ir al frame 20 cuando aun dicho frame no esta disponible.

El código correcto seria:

Código:
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;
	}
};
Hacemos una precarga y cuando este cargado nuestro SWF en su totalidad hacemos el gotoAndPlay.

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:
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");
};
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.

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:
ball_mc.onRelease = function() {
	_root.mi_txt.text = "Hola";
};
Esto funciona solo y solo si cuando la película es ejecutado sola. ya que tenemos esta estructura

Código:
|-_root
    |-mi_txt
Pero que pasa cuando cargamos este SWF en otra película por ejemplo usando esto:

Código:
clip_mc = this.createEmptyMovieClip("holder", 1);
clip_mc.loadMovie("ball.swf")
Deja de funcionar ya que las rutas cambiaron ahora las rutas son

Código:
|-_root
    |-clip_mc
        |-mi_txt
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.

La solución es usar rutas RELATIVAS

Código:
ball_mc.onRelease = function() {
	this._parent.mi_txt.text = "Hola";
};
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 texto

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!!

Última edición por TMeister; 17/03/2005 a las 10:43
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 08:40.