Hola, Modifique tu clase, esta es una mejor forma de tratar este tipo de situaciones, hacer que la clase funcione como el listener de los MovieClipLoader, quite todos esos "clase = this", cosas asi, y agrege this a todo lo que sea interno, esas cosas se llaman mejores practicas, ademas, marque los problemas que encontre y puse unos comentarios y movi una cosas, espero no te cause problema, no es dificl entenderlo, hice lo posible para que funcionara talcual como te funcionaba antes. Cualquier cosa me dices, espero que con eso se solucione el problema del Loader, espero no la encuentres muy cambiada. Suerte.
Código ActionScript :
import gs.TweenFilterLite;//ver documentacion
import mx.transitions.easing.*;
class Proyector extends MovieClip
{
//*******variables de CONSTRUCTOR y externas
private var _destino:MovieClip;
private var _ArrayElementos:Array;
private var _ArraySubmenu:Array;
private var _iElementoActivo:Number;
private var _iSubmenuActivo:Number;
//***
private var loader:MovieClipLoader;
private var PRECARGA:MovieClip;
private var mask:MovieClip;
private var Img1:MovieClip;
private var Img2:MovieClip;
private var iCarga:Number;
private var ImagenVisibleAhora:Number;
private var clipCarga:MovieClip;
private var clipAnterior:MovieClip;
private var anchoImagenMax:Number;
private var altoImagenMax:Number;
private var primeraVez:Boolean;
private var mouseListener:Object;
public function Proyector(destino:MovieClip, ArrayElementos:Array)
{
super();
this.anchoImagenMax = 424;
this.altoImagenMax = 302;
this._destino = ( destino == "" || destino == undefined ) ? _root : destino ;
this._ArrayElementos = ( ArrayElementos.length >= 1 || ArrayElementos != undefined) ? ArrayElementos : [] ;
this.loader = new MovieClipLoader();
this.loader.addListener( this );
this.inicio();
}
/**** LOADER EVENTS ****/
public function onLoadStart( target_mc:MovieClip ):Void
{
this.PRECARGA._visible = true;
}
public function onLoadProgress( target_mc:MovieClip, loadedBytes:Number, totalBytes:Number):Void
{
var w:Number = Math.floor( loadedBytes / totalBytes * 100 );
//Aqui te pongo un codigo para mostrar una precarga de 0 a 100 sobre todos los items
trace("carga general -> " + ( (loadedBytes / totalBytes) + this.iCarga ) / this._ArraySubmenu.length ) * 100 );
//this.PRECARGA.gotoAndStop( w );
//this._parent.porcentaje_txt.text = w + "%";
}
public function onLoadComplete( target_mc:MovieClip, httpStatus:Number ):Void
{
clase.PRECARGA._visible = false;
/*trace(">> onLoadComplete() httpStatus: " + httpStatus);*/
}
public function onLoadInit( target_mc:MovieClip ):Void
{
this.ControlaLoader( target_mc );
}
public function onLoadError( target_mc:MovieClip, errorCode:String, httpStatus:Number):Void
{
this.PRECARGA._visible = false;
trace("Error al cargar: " + target_mc._name);
}
/**** END LOADER EVENTS ****/
private function inicio( Void ):Void
{ //llamada al ejecutarse el Constructor
this.primeraVez = true;
this.iCarga = 0;
//_iSubmenuActivo=0;
//una vez ejecutado el constructor se crean mc auxiliares.
this.Img1 = this._destino.holder_mc.createEmptyMovieClip("Img1", this._destino.holder_mc.getNextHighestDepth());
this.Img2 = this._destino.holder_mc.createEmptyMovieClip("Img2", this._destino.holder_mc.getNextHighestDepth());
this.mask = this._destino.attachMovie("maskElementoGrande","mask_mc", this._destino.getNextHighestDepth());
this.crearPrecarga();
}
//*************MANEJO DE SUBMENU DE IMAGENES****************
public function setSubmenu( ArraySubmenu:Array ):Void
{
//llamado cada vez que cambia la opcion del menu principal (MenuElementos>>onPressOpcion)
for( var i:Number = 0 ; i < this._ArraySubmenu.length ; i++ )
{
this._ArraySubmenu[i].BTN.removeMovieClip();
}
this._ArraySubmenu = ArraySubmenu;
this._iSubmenuActivo = 0;
this.desplegarSubmenu();
}
private function desplegarSubmenu( Void ):Void
{ //llamado al cambiar de submenu (setSubmenu)
var posX:Number=0;
var posY:Number=0;
var distanciaV = 5;
for(var i:Number = 0 ; i < _ArraySubmenu.length ; i++)
{
var BTN : MovieClip = this._destino.submenuElementos_mc.createEmptyMovieClip("item"+i, this._destino.submenuElementos_mc.getNextHighestDepth() );
this._ArraySubmenu[ i ].BTN = BTN;
BTN = BTN.attachMovie("btSubmenu","btSubmenu", BTN.getNextHighestDepth());
BTN._y = posY;
BTN._x = posX;
this.defBTN(i);
}
this.iCarga = 0;
this.cargarElementosP();
this.setImagenSubmenu( this._iSubmenuActivo );
//activar la opcion iSubmenuActivo
_ArraySubmenu[_iSubmenuActivo].BTN.gotoAndPlay("over");
}
private function cargarElementosP( Void ):Void
{ //llamado desde desplegarSubmenu, carga las imagenes pequeñas del submenu
trace("cargarELEMENTOSP "+iCarga+"iCarga "+_ArraySubmenu[iCarga].imgP);
var imagenSrc:String = this._ArraySubmenu[iCarga].imgP;
var mc:MovieClip = this._ArraySubmenu[iCarga].BTN.elemento_mc.holder_mc;
this.loader.loadClip( imagenSrc , mc );
}
private function ControlaLoader( target_mc:MovieClip ):Void
{ //llamado desde loaderInit
if(target_mc._name == "Img1" || target_mc._name=="Img2" )
{
//si es la imagen grande
this.maskChangeDepth( this.clipCarga );//intercambia profundidades
TweenFilterLite.to(this.clipAnterior, 0.5, {_alpha:0});
TweenFilterLite.to(this.clipCarga, 0.5, {_alpha:100});
}
else if(target_mc._parent._parent._name == "btSubmenu")
{
//si es la imagen pequeña
this.iCarga++;
if( this.iCarga < this._ArraySubmenu.length )
{
this.cargarElementosP();
}
}
}
function defBTN(nro:Number)
{ //llamado al atachar cada clip de submenu
//define las acciones del boton
}
public function setImagenSubmenu( iSubmenuActivo:Number ):Void
{
//llmado al cliquear una imagen pequeña del submenu.
//carga la imagenGrande correspondiente
//:S redundante? this._iSubmenuActivo = iSubmenuActivo;
var imagenSrc:String = this._ArraySubmenu[iSubmenuActivo].imgG;
//mask._visible=false;
this.clipAnterior = this.clipCarga;
this.clipCarga = this.averiguarClipCarga();
/*Aqui tienes un problema, Loader ya esta siendo ocupado
* no puede cargar varias cosas a la vez, solo de una en una
* por eso lo voy a cambiar por un loader nuevo, pero como
* usa esta clase de listener, entonces la funcion onLoadProgress
* se va a ver afectada, marcara progresos raros hasta que
* imagenSrc se termine de cargar
*/
var auxLoader:MovieClipLoader = new MovieClipLoader();
auxLoader.addListener( this );
auxLoader.loadClip( imagenSrc , this.clipCarga );
}
function crearPrecarga( Void ):Void
{ //crea al comienzo la precarga
}
//**************
public function desplegarDatosElemento(_iElementoActivo:Number)
{
//llamada al cliquear en MenuElementos.AS
//carga la los datos del menu
}
//********************
private function averiguarClipCarga()
{ //averigua donde debe cargarse la imagen para crear efecto de fade in out
}
private function maskChangeDepth(mc)
{
//llamada una vez terminada de cargar la imagen a mostrar
}
//*************
}