Buenas! Pues tengo una función que requiere 26 argumentos y, cómo Game Maker sólo permite 16, pensé en mandarle un array en su lugar, pero TENGO que poder crear el array en una sola línea, en la misma línea de la llamada.
scPerAsignaPose( [ 0, x, 90, 0, 90, 0, x, 270, 0, 270, 0, x, 270, 0, 270, 0, x, 270, 0, 270, 0, x, 270, 0, 270, 0 ] );
Yo llamo a la función, y tengo que PODER pasarle el array así (de lo contrario simplemente puedo llamar a dos funciones, que juntas suman 32 argumentos). Cuál es la forma correcta? Suponiendo que la haya...
No se puede definir más de un elemento de un array en una sola línea así que olvídate de esto:
[ 0, x, 90, 0, 90, 0, x, 270, 0, 270, 0, x, 270, 0, 270, 0, x, 270, 0, 270, 0, x, 270, 0, 270, 0 ]
Si quieres entregarle al script un array, tiene que estar en la forma de una variable y usar una línea de código por cada definición de sus elementos:
array[0]=arg0;
array[1]=arg1;
array[2]=arg2;
.
.
.
array[25]=arg25;
scPerAsignaPose(array);
No me imagino cuál puede ser la necesidad de tener que hacer ambas cosas en una sola línea, sería bueno que explicaras el por qué de esa necesidad. Si necesitas entregarle a un script más de 16 argumentos, también puedes introducirlos en una lista y entregarle al script la id de esa lista como argumento:
argumentos=ds_list_create();
ds_list_add(argumentos,arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14);
ds_list_add(argumentos,arg15,arg16,arg17,arg18,arg19,arg20,arg21,arg22,arg23,arg24,arg25);
scPerAsignaPose(argumentos);//dentro del script se debe destruir la lista argumentos
Gracias por la info!
Básicamente tengo 21 variables a las cuales quiero dar valor en una sola línea, del tirón, llamando al script, y pasándole como argumentos los 20 valores.
Ahora mismo tengo:
scPerAsignaPoseA( 0, x, 90, 0, 90, 0, x, 270, 0, 270, 0, x, 270, 0, 270, 0 ); scA( 270, 0, 270, 0, x, 270, 0, 270, 0 );
Que es más o menos lo mismo, pero quería hacerlo más bonito y compacto juntándolo en una sola función. Visto que no se puede me quedo con lo anterior que, aunque cutre y con dos llamadas, sigue siendo una sola línea.
Cita de: DarkKRuleR en Noviembre 20, 2015, 01:43:38 PM
Gracias por la info!
Básicamente tengo 21 variables a las cuales quiero dar valor en una sola línea, del tirón, llamando al script, y pasándole como argumentos los 20 valores.
Ahora mismo tengo:
scPerAsignaPoseA( 0, x, 90, 0, 90, 0, x, 270, 0, 270, 0, x, 270, 0, 270, 0 ); scA( 270, 0, 270, 0, x, 270, 0, 270, 0 );
Que es más o menos lo mismo, pero quería hacerlo más bonito y compacto juntándolo en una sola función. Visto que no se puede me quedo con lo anterior que, aunque cutre y con dos llamadas, sigue siendo una sola línea.
no se de que manera esta construido tu script pero puedes hacer algo como esto
[gml]
//al llamar al script
variable[0]="valor"
variable[1]="valor"
variable[2]="valor"
.
.
.
variable[n]="valor"
scPerAsignaPoseA(variable)
//dentro del script
var variable_script = argument0
if variable_script[0]....
if variable_script[1]....
while (variable_script[n] = "cualquier cosa"){...
[/gml]
esta es una manera de transportar un array a otra variable
Sí, pero eso no puedo hacerlo en una línea, y la idea era una sola línea, porque si no puedo simplemente llamar a 2 funciones consecutivas que ya ocupan 1 línea