Resulta que estoy haciendo una aplicación en la que tengo un principal.swf donde cargo otros 4 swf externos (secc01.swf, secc02.swf ...). Tengo también dos botones anterior y siguiente, en principal.swf, que harán que se cierre el swf abierto y se abra otro. Hasta ahí no tendría mucho problema. Lo que pasa es que he querido que antes de cerrarse el swf presente haga una animación de desvanecimiento en la linea de tiempo. Para eso les he puesto a todos esos swfs secundarios un primer stop antes de esa animación y otra al final. También uso un Timer para que el primer swf se cargue 3 segundos despues de empezar la peli. Dejo mejor el código completo de principal.swf donde se entenderá mejor.
Código ActionScript :
//importamos todas las clases necesarias.
import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
import flash.display.MovieClip;
//de entrada los botones anterior/siguiente no son visibles.
flechaant.visible = false;
flechasig.visible = false;
//aquí ponemos el número de swfs secc que tenemos.
var numseccs:Number = new Number(4);
/*hacemos que la variable "seccion", que será la que utilicemos para decir
qué swf cargamos sea un número al azar entre 1 y el numero de swfs que
tengamos. y hacemos un trace para asegurarnos de que va bien.*/
var seccion:Number = new Number(Math.ceil(Math.random() * numseccs));
trace(seccion);
/*creamos un primer contador que hace esperar 3 segundos que es lo que tarda
el abuelo en lanzar la primera bola*/
var contadorini:Timer = new Timer(3000,1);
contadorini.addEventListener(TimerEvent.TIMER, mostrar);
contadorini.start();
//creamos la función que se encarga de la carga de las secciones.;
function mostrar(evento:TimerEvent):void
{
/*primero localizamos el swf sirviendonos de la variable "seccion" que
es un número al azar, para que sea dinámico. Lo dejamos en el loader
"cargador" para llamarlo más adelante.*/
var ruta:URLRequest = new URLRequest("secc0" + seccion + ".swf");
var cargador:Loader = new Loader();
cargador.load(ruta);
/*creamos un listener que nos avise de que el swf se ha cargado
completamente para que no haya errores, y en ese momento llamamos a la
funcion "esperar" que hará que el clip aparezca finalmente en pantalla.*/
cargador.contentLoaderInfo.addEventListener(Event.COMPLETE, esperar);
function esperar(evento:Event):void
{
/*cargamos el swf como clip dos niveles por debajo del último para
que quede por debajo de los dos botones de las flechas, y estos
los ponemos visibles.*/
addChildAt(cargador.content as MovieClip, numChildren-2);
if (seccion < numseccs)
{
flechasig.visible = true;
}
else
{
flechasig.visible = false;
}
if (seccion > 1)
{
flechaant.visible = true;
}
else
{
flechaant.visible = false;
}
/*les colocamos unos listeners a los botones para que lancen unas
funciones cuando se haga click sobre ellos.*/
flechasig.addEventListener(MouseEvent.CLICK, seccionsig);
flechaant.addEventListener(MouseEvent.CLICK, seccionant);
/*las funciones de los botones modifican la variable "seccion" para
que se muestren los otros swfs y llaman a una función nueva para que
los cargue.*/
function seccionsig(evento:MouseEvent):void
{
if (seccion < numseccs)
{
seccion++;
}
else
{
seccion = numseccs;
}
trace(seccion);
nueva(evento);
}
function seccionant(evento:MouseEvent):void
{
if (seccion > 1)
{
seccion--;
}
else
{
seccion == 1;
}
trace(seccion);
nueva(evento);
}
}
}
/*la función "nueva" da play al swf externo para que muestre la animación
de cierre, elimina el contenido de ese swf que estámos cerrando y hace la
carga de uno nuevo.*/
function nueva(evento:Event):void
{
MovieClip(cargador.content).play();
cargador.unload();
var ruta:URLRequest = new URLRequest("secc0" + seccion + ".swf");
var cargador:Loader = new Loader();
cargador.load(ruta);
trace("hecho");
}Posiblemente haya puesto varias cosas mal, pero me funciona todo hasta llegar a la parte de cargar un swf nuevo. Creo que el problema lo tengo con el asunto de llamar a funciones que están dentro de otra función, o desde otra... El error que me da es:
TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at principal_fla::MainTimeline/nueva()
at Function/<anonymous>()
