Yo hace tiempo desarrolle una clasesita para manejo de Arrays de 2
dimensiones, las clases worldElement y WorldElementsLibrary no sion más
que un contenedor y un tipo de datos, solo se trataría de modificar eso
para tu uso ahí te va:



import worldElement;
import WorldElementsLibrary
class Parsers {
        //----DEFINICIÓN DE VARIABLES
        var swFile;
        //----CONSTRUCTOR
        function Parsers() {
        }
        //----GET & SET
        //T_ARRAY
        static function get t_array():Array {
                return create2dArray(15, 15);
        }
        ///////////////////////////////
        //----FUNCIONES----//
        //////////////////////////////
        //----CREATE 2D ARRAY
        static function create2dArray(w:Number, h:Number) {
                //Definición
                var _array:Array = new Array(h);
                //Bucle
                for (var i = 0; i<h; i++) {
                        var int_array:Array = new Array(w);
                        for (var j = 0; j<w; j++) {
                                int_array[j] = 0;
                        }
                        _array[i] = int_array;
                }
                //Salida
                return _array;
        }
        //----MATRIX TO COORDS
        static function matrixToCoords(matrix_array:Array):Array {
                //Definición
                var coords_array:Array = new Array();
                //Bucle
                for (var i = 0; i<matrix_array.length; i++) {
                        for (var j = 0; j<matrix_array[i].length; j++) {
                                if (Number(matrix_array[i][j]) != 0) {
                                        coords_array.push({x:j, y:i,
z:Number(matrix_array[i][j])});
                                }
                        }
                }
                //Salida
                return coords_array;
        }
        //----COORDS TO MATRIX
        static function coordsToMatrix(coords_array:Array, w:Number,
l:Number):Array {
                //Definición
                //definir arr, contiene una matriz2d creada a partir del
largo y ancho
                //que marcan los puntos del arreglo
                var arr:Array = create2dArray(w, l);
                //Bucle, se agregan el punto (coordenada) ' z ' a su
respectiva posiciones en cada uno de los miembros del array[array]
                for (var i = 0; i<coords_array.length; i++) {
                        var element = coords_array[i];
                        arr[element.y][element.x] = 1;
                        for (var fuck in coords_array[i]) {
                                //_root.textArea.text +=
"\nelement["+fuck+"] :"+coords_array[i][fuck]+"\n";
                        }
                }
                for (var i = 0; i<l; i++) {
                        for (var n = 0; n<l; n++) {
                                arr[i][n] != 1 ? arr[i][n]=0 : 0;
                        }
                }
                //_root.textArea.text += "\n";
                //debugeo
                trace("---arr---");
                trace(arr);
                //Salida
                return arr;
        }
        //----ROTATE COORDS ARRAY
        static function rotateCoordsArray(crds_array:Array,
oriented:String, w:Number, h:Number) {
                var r_array:Array = coordsToMatrix(crds_array, w, h);
                for (var lar = 0; lar<r_array.length; lar++) {
                        //_root.textArea.text += "r_array"+lar+" ::
"+r_array[lar];
                }
                r_array = rotateArray(r_array, oriented);
                r_array = matrixToCoords(r_array);
                return r_array;
        }
        //----ADD NULL ARRAY
        static function addNullArr(_array:Array, wid:Number,
hei:Number):Array {
                //Definir ' formato ' introduciendo una Matriz 2d
utilizando las medidas deseadas
                var format:Array = create2dArray(wid, hei);
                for (var name in _array) {
                        for (var each in _array[name]) {
                                format[name][each] = _array[name][each];
                        }
                }
                return format;
        }
        //----DELETE NULL ARRAY
        static function deleteNullArr(_array:Array):Array {
                var large:Number = 0;
                var lastSum:Boolean = false;
                for (var name in _array) {
                        var sum:Number = 0;
                        for (var each in _array[name]) {
                                sum += _array[name][each] == -1 ? 1 :
_array[name][each];
                                if (_array[name][each] == 0 && sum == 0)
{
                                        //trace("°°° "+name+" °
"+_array[name][each]);
                                        _array[name].pop();
                                }
                        }
                        if (sum == 0 && !lastSum) {
                                _array.pop();
                        } else {
                                lastSum = true;
                        }
                        large<_array[name].length ?
large=_array[name].length : large=large;
                }
                for (var eacht = 0; eacht<_array.length; eacht++) {
                        if (_array[eacht].length<large) {
                                var it = large-_array[eacht].length;
                                for (var q = 0; q<it; q++) {
                                        _array[eacht].push(0);
                                }
                        }
                        //trace("|"+_array[eacht]+"|
"+_array[eacht].length);
                }
                return _array;
        }
        //----ROTATE ARRAY
        static function rotateArray(_array:Array, cardinal:String):Array
{
                if (cardinal == "E") {
                        //izq
                        var N_array:Array = create2dArray(_array.length,
_array[0].length);
                        for (var i = 0; i<_array.length; i++) {
                                for (var m = 0; m<_array[i].length; m++)
{
                                        N_array[m][i] = _array[i][m];
                                }
                        }
                        N_array.reverse();
                } else if (cardinal == "W") {
                        //der
                        var N_array:Array = create2dArray(_array.length,
_array[0].length);
                        for (var i = 0; i<_array.length; i++) {
                                for (var m = 0; m<_array[i].length; m++)
{
                                        N_array[m][i] = _array[i][m];
                                }
                        }
                        for (var n = 0; n<N_array.length; n++) {
                                N_array[n].reverse();
                        }
                } else if (cardinal == "S") {
                        //turn
                        var N_array:Array =
create2dArray(_array[0].length, _array.length);
                        for (var o = 0; o<N_array.length; o++) {
                                N_array[o] = _array[o].reverse();
                        }
                        N_array.reverse();
                } else if (cardinal == "N") {
                        //no cambia
                        N_array = _array;
                }
                return N_array;
        }
        //----GENERATE XML
        static function generateXml(o:worldElement):String {
                var line:String;
                var shape:Array = o.wo_shape;
                var access:Array = o.wo_access;
                var ep_array:Array;
                deleteNullArr(access);
                deleteNullArr(shape);
                shape = rotateArray(shape, o.wo_oriented);
                o.wo_width = shape[0].length;
                o.wo_length = shape.length;
                access = addNullArr(access, o.wo_width, o.wo_length);
                access = rotateArray(access, o.wo_oriented);
                line = "<OBJECT id=\""+o.wo_id+"\"
faces=\""+o.wo_faces+"\" tooltip=\"";
                line += o.wo_ttip+"\" width=\"";
                line += o.wo_width+"\" height=\"";
                line += o.wo_length+"\" desc=\"";
                line += o.wo_desc+"\"  type=\"";
                line += o.wo_prefix.toUpperCase();
                line += "\">";
                //
                line += "<SHAPE>";
                for (var j = 0; j<shape.length; j++) {
                        !shape[j] ? shape[j]=0 : null;
                        line += "<ROW>";
                        for (var l = 0; l<shape[j].length; l++) {
                                line += shape[j][l]=shape[j][l] == -1 ?
0 : shape[j][l].toString();
                        }
                        line += "</ROW>";
                }
                //
                line += "</SHAPE>";
                //
                line += "<ACCESS>";
                //
                for (var k = 0; k<o.wo_length; k++) {
                        line += "<ROW>";
                        for (var m = 0; m<o.wo_width; m++) {
                                line +=
Math.abs(Number(access[k][m])-1).toString();
                        }
                        line += "</ROW>";
                }
                //
                line += "</ACCESS>";
                //
                line += "<ASSETS>";
                //
                //line += "<object id=\"bartittle\" pos=\"123,145\"
multilang=\"true\"/>";
                //line += "<object id=\"door\" pos=\"148,345\"/>";
                //
                line += "</ASSETS>";
                //
                line += "<LINK command=\"";
                line += o.wo_linkCmd+"\" />";
                //
                line += "<ENTRYPOINT>";
                //
                /////////////////
                ep_array = rotateCoordsArray(o.wo_epoint, o.wo_oriented,
o.wo_width, o.wo_length);
                for (var n in ep_array) {
                        line += "<AccessPoint x=\"";
                        line += String(ep_array[n].x);
                        line += "\" y=\"";
                        line += String(ep_array[n].y);
                        line += "\" entry=\"N,S,E,W\"/>";
                }
                //*/
                line += "</ENTRYPOINT>";
                //
                line += "</OBJECT>";
                line = unescape(line);
                //_root.textArea.text += "\n******\n"+access;
                return line;
        }
        //----PARSE XML
        static function parseXml(str:String,
route:String,wel:WorldElementsLibrary) {
                //DEFINICIÓN DE VARIABLES
                var xml:XML = new XML();
                var childs_array:Array;
                var accChilds_array:Array;
                var reorient:String;
                var r:worldElement;
                xml.ignoreWhite = true;
                //WML ONLOAD
                xml.onLoad = function(success) {
                        set(route+"."+xml.firstChild.attributes.id, new
worldElement(xml.firstChild.attributes.id,
xml.firstChild.attributes.tooltip, xml.firstChild.attributes.faces,
xml.firstChild.attributes.width, xml.firstChild.attributes.height,
xml.firstChild.attributes.desc, xml.firstChild.attributes.type));
                        if (eval(route+"."+xml.firstChild.attributes.id)
instanceof worldElement) {
        
wel.addWorldElement(eval(route+"."+xml.firstChild.attributes.id),
_root.moviesPath+"/"+eval(route+"."+xml.firstChild.attributes.id).wo_pre
fix+"\\"+xml.firstChild.attributes.id+".swf");
                                _root.textArea.text+="\n_root.moviesPath
desde Parsers ::"+_root.moviesPath
                                childs_array =
xml.firstChild.firstChild.childNodes;
                                accChilds_array =
xml.firstChild.firstChild.nextSibling.childNodes;
                        var wo:worldElement =
eval(route+"."+xml.firstChild.attributes.id);
                                var shape_array:Array =
create2dArray(wo.wo_width, wo.wo_length);
                                var access_array:Array =
create2dArray(wo.wo_width, wo.wo_length);
                                for (var i = 0; i<childs_array.length;
i++) {
                                        shape_array[i] =
String(childs_array[i].firstChild).split("");
                                        access_array[i] =
String(accChilds_array[i].firstChild).split("");
                                }
                                /////////
                                if (wo.wo_oriented == "W") {
                                        reorient = "E";
                                } else if (wo.wo_oriented == "E") {
                                        reorient = "W";
                                } else {
                                        reorient = wo.wo_oriented;
                                }
                                shape_array = rotateArray(shape_array,
reorient);
                                access_array = rotateArray(access_array,
reorient);
                                for (var i = 0; i<access_array.length;
i++) {
                                        for (var n = 0;
n<access_array.length; n++) {
                                                access_array[j][n] =
Math.abs(Number(access_array[j][n])-1);
                                        }
                                }
                                shape_array = addNullArr(shape_array,
15, 15);
                                access_array = addNullArr(access_array,
15, 15);
                                /////////
                                for (var j = 0; j<shape_array.length;
j++) {
                                        for (var k = 0;
k<shape_array[i].length; k++) {
                                                shape_array[j][k] =
Number(shape_array[j][k]);
                                                access_array[j][k] =
Number(access_array[j][k]);
                                                if (shape_array[j][k] !=
0) {
                                                        if
(shape_array[j][k] == null || shape_array[j][k] == undefined ||
shape_array[j][k] == "") {
        
shape_array[j][k] = 0;
                                                        }
                                                }
                                        }
                                }
                                wo.wo_shape = shape_array;
                                wo.wo_access = access_array;
                                var epoint_array:Array = new Array();
                                for (var aNode =
xml.firstChild.firstChild; aNode != null; aNode=aNode.nextSibling) {
                                        if (aNode.nodeName == "LINK") {
                                                wo.wo_linkCmd =
aNode.attributes.command;
                                        }
                                        if (aNode.nodeName ==
"ENTRYPOINT") {
                                                for (var bNode =
aNode.firstChild, n = 0; bNode != null; bNode=bNode.nextSibling, n++) {
                                                        var obj:Object =
new Object();
                                                        obj.x =
bNode.attributes.x;
                                                        obj.y =
bNode.attributes.y;
        
epoint_array.push(obj);
                                                }
                                        }
                                }
                                wo.wo_epoint =
rotateCoordsArray(epoint_array, reorient, wo.wo_width, wo.wo_length);
                        }
                };
                //LOAD XML
                xml.load(str);
        }
        //----SLASHES
        static function Slashes(input):String {
                var parsed = "";
                var _array:Array = input.split("\\");
                for (var i = 0; i<_array.length-1; i++) {
                        parsed += _array[i]+"/";
                }
                parsed += _array[_array.length-1];
                return parsed;
        }
        //----OR_DECRYPT
        static function or_decrypt(binValue:Number,
elements:Number):Array {
                var resultArray:Array = new Array();
                var j:Number = 1;
                if (elements == null || elements<1) {
                        var elements = 1;
                }
                for (var i = 0; i<elements; i++) {
                        var decResult = ((binValue | j) == binValue);
                        //resultArray.push(decResult+"("+j+")-"+i);
                        resultArray.push(decResult);
                        j = (j << 1);
                }
                return resultArray;
        }
        //----OR_ENCRYPT
        static function or_encrypt(elements:Array):Number {
                var _array:Array = new Array(elements.length);
                var j:Number = 1;
                var r:Number = 0;
                for (var i = 0; i<elements.length; i++) {
                        _array[i] = elements[i] ? (j << i) : 0;
                        r += _array[i];
                }
                delete j;
                delete _array;
                return r;
        }
}
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------

Responder a