Hola lista...

Tengo la siguiente clase:

<CODE>

class movieclips.others.DummyMCmanager {
        
        static var numDummyMCmanager_int:Number = 0;
        private static var initialDepth_int:Number = -50;
        private static var dummiesMCref_array:Array = new Array();
        private static var numOfDummiesInStage_int:Number =
dummiesMCref_array.length;
        private static var initialDummy_mc:MovieClip;
        
        
        function DummyMCmanager(){
                this.main();
        }
        
        static public function
createNewDummy(nameDummy_str:String):MovieClip {
                var rMCtemp_mc:MovieClip = null;
                try {
                        if (!initialDummy_mc) {
                                createFirstDummy();
                        }
                        rMCtemp_mc =
initialDummy_mc.duplicateMovieClip(nameDummy_str, getNextDepth());
                        rMCtemp_mc.numId_int = numOfDummiesInStage_int =
dummiesMCref_array.push(rMCtemp_mc);
                } catch (error_err) {
                        // logging of the error...
                        trace(error_err);
                        return null;
                }
        }
        
        
        static public function deleteDummyByRef(rMC_mc:MovieClip):Boolean {
                var indexInstance_int:Number = 0;
                var located_bol:Boolean = false;
                var currentMC_mc:MovieClip = null;
                var nextMC_mc:MovieClip = null;
                var actualDepth_int:Number = null;
                try {
                        var countMax_int:Number = dummiesMCref_array.length;
                        for (var count_int:Number = 0; count_int <
countMax_int; count_int++) {
                                currentMC_mc =
dummiesMCref_array[count_int];
                                if (rMC_mc == currentMC_mc) {
                                        indexInstance_int = count_int;
                                        countMax_int =
dummiesMCref_array.length;
                                        /*
                                        * EL MÉTODO SLICE NO SE PORQUÉ
DIANTRES NO FUNCIONA AQUÍ
                                        * CON LO CUÁL TENDREMOS QUE HACER LA
ELIMINACIÓN A "MANO"
                                        * SE HARÁ MOVIENDO LOS ELEMENTOS QUE
QUEDAN UNA POSICIÓN
                                        * PARA ATRÁS, Y ELIMINANDO EL ÚLTIMO
CON .pop
                                        */
        
//dummiesMCref_array.slice(indexInstance_int, 3);
                                        nextMC_mc =
dummiesMCref_array[indexInstance_int + 1];
                                        if (nextMC_mc) {
        
dummiesMCref_array[indexInstance_int] = null;
                                                trace("currentMC_mc: " +
currentMC_mc);
                                                deleteDummyMC(currentMC_mc);
                                                actualDepth_int =
nextMC_mc.getDepth();
                                                for (var count2_int:Number =
indexInstance_int; 
                                                                count2_int <
countMax_int; count2_int++) {
                                                        currentMC_mc =
dummiesMCref_array[count2_int];
                                                        nextMC_mc =
dummiesMCref_array[count2_int + 1];
                                                        if (nextMC_mc) {
        
dummiesMCref_array[count2_int] = nextMC_mc;
                                                        }
                                                }
                                                dummiesMCref_array.pop();
                                        } else {
                                                deleteDummyMC(currentMC_mc);
                                                dummiesMCref_array.pop();
                                        }
                                        located_bol = true;
                                }
                        }
                        return located_bol;
                } catch (error_err) {
                        // logging of the error...
                        trace(error_err);
                        return false;
                } 
        }
        
        
        // Delete Dummy by Num (position in matrix)
        static public function
deleteDummyByNum(numInstance_int:Number):Boolean {
                var indexInstance_int:Number = numInstance_int;
                var located_bol:Boolean = false;
                try {
                        numOfDummiesInStage_int = dummiesMCref_array.length;
                        // dummiesMCref_array.slice(indexInstance_int, 1);
                        dummiesMCref_array[indexInstance_int] = null;
                        var countMax2_int = dummiesMCref_array.length;
                        for (var count2_int:Number = indexInstance_int; 
                                count2_int < countMax2_int; count2_int++) {
                                if (count2_int < (countMax2_int - 1)) {
                                        dummiesMCref_array[count2_int] =
dummiesMCref_array[count2_int + 1];
                                }
                        }
                        dummiesMCref_array.pop();                       
                        return true;
                } catch (error_err) {
                        // logging of the error...
                        trace(error_err);
                        return false;
                }               
                
        }       
        
        static private function getNextDepth():Number {
                var nextDepth_int:Number;
                numOfDummiesInStage_int = dummiesMCref_array.length;
                if (numOfDummiesInStage_int != 0) {
                        nextDepth_int = initialDepth_int -
numOfDummiesInStage_int;
                } else {
                        nextDepth_int = initialDepth_int;
                }
                return nextDepth_int;
        }
        
        static public function getArrayDummies():Array {
                return dummiesMCref_array;
        }
        
        static public function getCurrentNumDummies():Number {
                return dummiesMCref_array.length;
        }
        
        static function deleteDummyMC(rMC_mc:MovieClip):Boolean {
                // Debug: trace("rMC_mc to delete: " + rMC_mc);
                // Debug: trace("dummiesMCref_array: " +
dummiesMCref_array);
                try {
                        rMC_mc.removeMovieClip();
                        return true;
                } catch (error_err) {
                        // logging of the error...
                        trace(error_err);
                        return false;
                }
        }
        
        static function createFirstDummy():Boolean {
                try {
                        initialDummy_mc =
_root.createEmptyMovieClip("DummyInicialParaClase", (initialDepth_int + 1));
                        if (initialDummy_mc) {
                                return true;
                        } else {
                                return false;
                        }
                } catch (error_err) {
                        // logging of the error...
                        trace(error_err);
                        return false;
                }
        }
        
        private function main():Void {
                numDummyMCmanager_int++;
        }
        
}

</CODE>

Que si pruebo así en Flash:

<CODE>

import movieclips.others.DummyMCmanager;
DummyMCmanager.createNewDummy("insMCcontroller1");
DummyMCmanager.createNewDummy("insMCcontroller2");
DummyMCmanager.createNewDummy("insMCcontroller3");
DummyMCmanager.createNewDummy("insMCcontroller4");
DummyMCmanager.createNewDummy("insMCcontroller5");

for (var i=1; i<6; i++) {
        rMC_mc = _root["insMCcontroller"+i];
        trace("Depth of " + "insMCcontroller" + i + " : " +
rMC_mc.getDepth())
}
// trace("DummyMCmanager.getArrayDummies(): " +
DummyMCmanager.getArrayDummies());
trace("DummyMCmanager.getCurrentNumDummies(): " +
DummyMCmanager.getCurrentNumDummies());
DummyMCmanager.deleteDummyByRef(_root.insMCcontroller3);
// trace("DummyMCmanager.getArrayDummies(): " +
DummyMCmanager.getArrayDummies());
trace("DummyMCmanager.getCurrentNumDummies(): " +
DummyMCmanager.getCurrentNumDummies());
for (var i=1; i<6; i++) {
        rMC_mc = _root["insMCcontroller"+i];
        trace("Depth of " + "insMCcontroller" + i + " : " +
rMC_mc.getDepth());
}

</CODE>


 obtengo esto...

<OUTPUT>

Depth of insMCcontroller1 : -50
Depth of insMCcontroller2 : -51
Depth of insMCcontroller3 : -52
Depth of insMCcontroller4 : -53
Depth of insMCcontroller5 : -54
DummyMCmanager.getCurrentNumDummies(): 5
DummyMCmanager.getCurrentNumDummies(): 4
Depth of insMCcontroller1 : -50
Depth of insMCcontroller2 : -51
Depth of insMCcontroller3 : -52
Depth of insMCcontroller4 : -53
Depth of insMCcontroller5 : -54

</OUTPUT>


        O sea, borra la referencia del array, pero no borra el MC que hay en
la escena, a pesar de que ha sido creado con un duplicateMovieClip.

        ¿A alguno se le ocurre el porqué?

        Ah... Me ha parecido muy "divertido" el error que me da el método
slice de la clase Array... No me va en la clase, y tengo que borrar "a mano"
el elemento que voy a borrar...

        Gracias a todos :)

        Un saludo.




----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------

Responder a