Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: DarkKRuleR en Abril 03, 2016, 05:05:26 PM

Título: Crear un array 2D de forma fácil visiblemente?
Publicado por: DarkKRuleR en Abril 03, 2016, 05:05:26 PM
Buenas! Querría hacer algo como...

vrArray = [
     0,1,2,
     3,4,5
]


etc. Alguna forma de crear un array 2D para maximizar el visualizar fácilmente los datos como si fueran una matriz

Sé que puedo hacer:

vrArray[0,0] = 0; vrArray[0,1] = 1;...
vrArray[1,0] = 3; ...

pero es extremadamente cansino, feo e ineficiente... quiero poder ver los datos en forma de matriz 2D fácilmente interpretable y editable en el propio evento create. Alguna idea?

Lo haría con un script, pero sólo permite 12 argumentos, y la matriz puede sobrepasar las 50 columnas...
Título: Re:Crear un array 2D de forma fácil visiblemente?
Publicado por: Clamud en Abril 03, 2016, 05:39:07 PM
Podrías crear un script para convertir cadenas de texto en arrays, con la sintaxis de matlab: 'coma' para separan los valores en un rengón y 'punto y coma' para crear un nuevo renglón. Me parece interesante, intentaré hacer un script.

EDIT: Ya hice un script
[gml]
///string_matrix( string );
/*
    Crea una matriz 2D a partir de una cadena
    , separa las columnas
    ; separa los renglones
*/

var cad = argument0; //cadena
var lon = string_length(cad); //longitud
var pos; //posicion
var mat; //matriz
var car; //caracter
var sub = ""; //sub-cadena
var i=0, j=0; //indices

for( pos=1; pos<=lon; pos++ ) //para todos los caracteres
{
    car = string_char_at( cad, pos );
    if( car == "," ){ //si es coma
        mat[i,j] = real(sub); //agregar valor a la matriz
        sub = ""; //borrar sub-cadena
        i++; //incrementar indice
    }
    else if( car == ";" ){ //si es punto y coma
        mat[i,j] = real(sub); //agregar valor a la matriz
        sub = ""; //borrar sub-cadena
        i = 0; //reiniciar i
        j++; //incrementar j
    }
    else sub += car; //agregar caracter a sub-cadena
}
return mat; //devolver matriz
[/gml]
No importar que se agreguen espacios o saltos de línea, sólo se deben usar dígitos y los caracteres ,.;
y la cadena debe terminar con ;
Ejemplo de uso:
[gml]
varArray = string_matrix("
1.10, 2.00, 3.14, 4.00;
5.00, 6.66, 7.00, 8.00;
9.22, 10.0, 11.1, 12.9;
");
[/gml]