Hola, he estado intentando hacer un pequeño videojuego que permite crear tus propios niveles. Y quiero, por ejemplo, guardar todas las posiciones de los objetos tales y despues cargarlas y crear la cantidad de objetos de ese tipo repartidos como se guardaron. Llevo algo de progreso creando unos scripts... claro que aún no funcionan...xD:
[gml]
Script: save_object_position
/*
save_object_position(obj, fname);
*/
var objj, objnum, fname, objname, xx, yy;
objj = argument0;
fname = argument1;
objname = object_get_name(objj);
objnum = instance_number(objj);
for(i=0;i<objnum;i+=1)
{
xx
= objj.x;
yy = objj.y;
ini_open(string(fname)+".ini");
ini_write_real(string(objname),"xx"+string(i),xx);
ini_write_real(string(objname),"yy"+string(i),yy);
ini_write_real(string(objname),"num",objnum);
ini_close();
}
[/gml]
Bueno, miré el .INI que este script crea y está casi perfecto. El problema es que todos los valores que guarda me los deja en 0, y sé que es porque sólo graba las posiciones de un solo objeto
Citar[gml]
...
xx = objj.x;
yy = objj.y;
[/gml]
Así que mi primera pregunta es, cómo guardar en cada dato de los array xx & yy, con los valores de cada objeto OBJJ existente.
Luego tengo un script que se supone carga todos los datos xx & yy guardados:
[gml]
Script: load_object_position
var fname, objname, xx, yy;
fname = argument0;
objname = argument1;
ini_open(string(fname)+".ini");
numm = ini_read_real(string(fname),"num",0);
for(i=0;i<numm;i+=1)
{
xx
= ini_read_real(string(fname),"xx"+string(i),0);
yy = ini_read_real(string(fname),"yy"+string(i),0);
instance_create(xx,yy,objname);
}
ini_close();
[/gml]
Pero este script no crea ningún objeto, y supongo que es gracias a que los valores del array XX & YY están en 0, como ya lo había dicho antes.
[spoiler]Este es el resultado del .INI que se crea con el script save_object_position:
[oWall]
yy180="0.000000"
xx180="0.000000"
yy178="0.000000"
xx178="0.000000"
yy176="0.000000"
xx176="0.000000"
yy174="0.000000"
xx174="0.000000"
yy172="0.000000"
xx172="0.000000"
yy170="0.000000"
xx170="0.000000"
yy168="0.000000"
xx168="0.000000"
yy166="0.000000"
xx166="0.000000"
yy164="0.000000"
xx164="0.000000"
yy162="0.000000"
xx162="0.000000"
yy160="0.000000"
xx160="0.000000"
yy158="0.000000"
xx158="0.000000"
yy156="0.000000"
xx156="0.000000"
yy154="0.000000"
xx154="0.000000"
yy152="0.000000"
xx152="0.000000"
yy150="0.000000"
xx150="0.000000"
yy148="0.000000"
xx148="0.000000"
yy146="0.000000"
xx146="0.000000"
yy144="0.000000"
xx144="0.000000"
yy142="0.000000"
xx142="0.000000"
yy140="0.000000"
xx140="0.000000"
yy138="0.000000"
xx138="0.000000"
yy136="0.000000"
xx136="0.000000"
yy134="0.000000"
xx134="0.000000"
yy132="0.000000"
xx132="0.000000"
yy130="0.000000"
xx130="0.000000"
yy128="0.000000"
xx128="0.000000"
yy126="0.000000"
xx126="0.000000"
yy124="0.000000"
xx124="0.000000"
yy122="0.000000"
xx122="0.000000"
yy120="0.000000"
xx120="0.000000"
yy118="0.000000"
xx118="0.000000"
yy116="0.000000"
xx116="0.000000"
yy114="0.000000"
xx114="0.000000"
yy112="0.000000"
xx112="0.000000"
yy110="0.000000"
xx110="0.000000"
yy108="0.000000"
xx108="0.000000"
yy106="0.000000"
xx106="0.000000"
yy104="0.000000"
xx104="0.000000"
yy102="0.000000"
xx102="0.000000"
yy100="0.000000"
xx100="0.000000"
yy98="0.000000"
xx98="0.000000"
yy96="0.000000"
xx96="0.000000"
yy94="0.000000"
xx94="0.000000"
yy92="0.000000"
xx92="0.000000"
yy90="0.000000"
xx90="0.000000"
yy88="0.000000"
xx88="0.000000"
yy86="0.000000"
xx86="0.000000"
yy84="0.000000"
xx84="0.000000"
yy82="0.000000"
xx82="0.000000"
yy80="0.000000"
xx80="0.000000"
yy78="0.000000"
xx78="0.000000"
yy76="0.000000"
xx76="0.000000"
yy74="0.000000"
xx74="0.000000"
yy72="0.000000"
xx72="0.000000"
yy70="0.000000"
xx70="0.000000"
yy68="0.000000"
xx68="0.000000"
yy66="0.000000"
xx66="0.000000"
yy64="0.000000"
xx64="0.000000"
yy62="0.000000"
xx62="0.000000"
yy60="0.000000"
xx60="0.000000"
yy58="0.000000"
xx58="0.000000"
yy56="0.000000"
xx56="0.000000"
yy54="0.000000"
xx54="0.000000"
yy52="0.000000"
xx52="0.000000"
yy50="0.000000"
xx50="0.000000"
yy48="0.000000"
xx48="0.000000"
yy46="0.000000"
xx46="0.000000"
yy44="0.000000"
xx44="0.000000"
yy42="0.000000"
xx42="0.000000"
yy40="0.000000"
xx40="0.000000"
yy38="0.000000"
xx38="0.000000"
yy36="0.000000"
xx36="0.000000"
yy34="0.000000"
xx34="0.000000"
yy32="0.000000"
xx32="0.000000"
yy30="0.000000"
xx30="0.000000"
yy28="0.000000"
xx28="0.000000"
yy26="0.000000"
xx26="0.000000"
yy24="0.000000"
xx24="0.000000"
yy22="0.000000"
xx22="0.000000"
yy20="0.000000"
xx20="0.000000"
yy18="0.000000"
xx18="0.000000"
yy16="0.000000"
xx16="0.000000"
yy14="0.000000"
xx14="0.000000"
yy12="0.000000"
xx12="0.000000"
yy10="0.000000"
xx10="0.000000"
yy8="0.000000"
xx8="0.000000"
yy6="0.000000"
xx6="0.000000"
yy4="0.000000"
xx4="0.000000"
yy2="0.000000"
xx2="0.000000"
num="181.000000"
yy0="0.000000"
xx0="0.000000"
xx1="0.000000"
yy1="0.000000"
xx3="0.000000"
yy3="0.000000"
xx5="0.000000"
yy5="0.000000"
xx7="0.000000"
yy7="0.000000"
xx9="0.000000"
yy9="0.000000"
xx11="0.000000"
yy11="0.000000"
xx13="0.000000"
yy13="0.000000"
xx15="0.000000"
yy15="0.000000"
xx17="0.000000"
yy17="0.000000"
xx19="0.000000"
yy19="0.000000"
xx21="0.000000"
yy21="0.000000"
xx23="0.000000"
yy23="0.000000"
xx25="0.000000"
yy25="0.000000"
xx27="0.000000"
yy27="0.000000"
xx29="0.000000"
yy29="0.000000"
xx31="0.000000"
yy31="0.000000"
xx33="0.000000"
yy33="0.000000"
xx35="0.000000"
yy35="0.000000"
xx37="0.000000"
yy37="0.000000"
xx39="0.000000"
yy39="0.000000"
xx41="0.000000"
yy41="0.000000"
xx43="0.000000"
yy43="0.000000"
xx45="0.000000"
yy45="0.000000"
xx47="0.000000"
yy47="0.000000"
xx49="0.000000"
yy49="0.000000"
xx51="0.000000"
yy51="0.000000"
xx53="0.000000"
yy53="0.000000"
xx55="0.000000"
yy55="0.000000"
xx57="0.000000"
yy57="0.000000"
xx59="0.000000"
yy59="0.000000"
xx61="0.000000"
yy61="0.000000"
xx63="0.000000"
yy63="0.000000"
xx65="0.000000"
yy65="0.000000"
xx67="0.000000"
yy67="0.000000"
xx69="0.000000"
yy69="0.000000"
xx71="0.000000"
yy71="0.000000"
xx73="0.000000"
yy73="0.000000"
xx75="0.000000"
yy75="0.000000"
xx77="0.000000"
yy77="0.000000"
xx79="0.000000"
yy79="0.000000"
xx81="0.000000"
yy81="0.000000"
xx83="0.000000"
yy83="0.000000"
xx85="0.000000"
yy85="0.000000"
xx87="0.000000"
yy87="0.000000"
xx89="0.000000"
yy89="0.000000"
xx91="0.000000"
yy91="0.000000"
xx93="0.000000"
yy93="0.000000"
xx95="0.000000"
yy95="0.000000"
xx97="0.000000"
yy97="0.000000"
xx99="0.000000"
yy99="0.000000"
xx101="0.000000"
yy101="0.000000"
xx103="0.000000"
yy103="0.000000"
xx105="0.000000"
yy105="0.000000"
xx107="0.000000"
yy107="0.000000"
xx109="0.000000"
yy109="0.000000"
xx111="0.000000"
yy111="0.000000"
xx113="0.000000"
yy113="0.000000"
xx115="0.000000"
yy115="0.000000"
xx117="0.000000"
yy117="0.000000"
xx119="0.000000"
yy119="0.000000"
xx121="0.000000"
yy121="0.000000"
xx123="0.000000"
yy123="0.000000"
xx125="0.000000"
yy125="0.000000"
xx127="0.000000"
yy127="0.000000"
xx129="0.000000"
yy129="0.000000"
xx131="0.000000"
yy131="0.000000"
xx133="0.000000"
yy133="0.000000"
xx135="0.000000"
yy135="0.000000"
xx137="0.000000"
yy137="0.000000"
xx139="0.000000"
yy139="0.000000"
xx141="0.000000"
yy141="0.000000"
xx143="0.000000"
yy143="0.000000"
xx145="0.000000"
yy145="0.000000"
xx147="0.000000"
yy147="0.000000"
xx149="0.000000"
yy149="0.000000"
xx151="0.000000"
yy151="0.000000"
xx153="0.000000"
yy153="0.000000"
xx155="0.000000"
yy155="0.000000"
xx157="0.000000"
yy157="0.000000"
xx159="0.000000"
yy159="0.000000"
xx161="0.000000"
yy161="0.000000"
xx163="0.000000"
yy163="0.000000"
xx165="0.000000"
yy165="0.000000"
xx167="0.000000"
yy167="0.000000"
xx169="0.000000"
yy169="0.000000"
xx171="0.000000"
yy171="0.000000"
xx173="0.000000"
yy173="0.000000"
xx175="0.000000"
yy175="0.000000"
xx177="0.000000"
yy177="0.000000"
xx179="0.000000"
yy179="0.000000"
Y verán que, aunque crea las KEYs necesarias para almacenar cada valor, todas están en 0[/spoiler]
Entonces, me gustaría que me ayudaran con este problema... :D :D
hasta este punto GMS no tiene tanta versatilidad cmo tu la buscas, lo puedes hacer de varias maneras en el archivo INI tener los valores a guardar para tantos objetos cmo necesites por ejemplo:
[posiciones]
objeto1.x = 10
objeto1.y = 10
objeto2.x = 10
objeto2.y = 10
objeto3.x = 10
objeto3.y = 10
pero este enfoque es poco practico, la otra alternativa es que tomes en un array o lista todos los objetos de los que quieras guardar sus datos e
ir creando un string de todo eso por ejemplo que se guarde en un formato cmo el siguiente:
posiciones = obj1x=10:obj1y=10:obj2x=10:obj2y=10:obj3x=10:obj3y=10:
asi cuando cargues estos valores vas a tener que romper el string y sacar los valores por separado, son meramente ejemplos, ignoro mucho cual sea tu enfoque de lo que quieras hacer, tal vez si te entenedemos mejor, podemos darte otra solucion.
saludos
1)- Gracias por responder.
2)-Sigo sin entender como guardar los datos, así sea con arrays como lo has dicho, por CADA objeto. Por ejemplo:
puse 3 objetos en la sala, y el GMS debería guardar algo así:
objeto1x = 32;
objeto1y = 32;
objeto2x = 64;
objeto2y = 64;
objeto3x = 96;
objeto3y = 96;
...
siendo que los objetos estuvieran ubicados en la posición 32*32;64*64;96*96...etc.
3)- Adjunto un pequeño ejemplo de el uso que le quiero dar a este tipo de guardado. Aunque el ejemplo no guarda..porque...bueno..ese es el problema...xD
Según lo que entiendo, el script tiene que guardar las ubicaciones (x,y) de todas las instancias de un objeto dado (cuyo object_index es argument0) en un archivo tipo ini cuyo nombre es argument1. Lo que yo haría sería guardar las variables x,y en una lista y luego guardar esa lista como string en el archivo. El siguiente script haría eso:
//scriptpara guardar coordenadas
//argument0=object_index del objeto
//argument1=nombre del archivo (sin el .ini)
var lista;
lista=ds_list_create();
with argument0
{
ds_list_add(lista,x);//guarda la x de la instancia
ds_list_add(lista,y);//guarda la y de la instancia
}
ini_open(argument1+".ini");
ini_write_string("coordenadas",object_get_name(argument0),ds_list_write(lista));
ini_close();
ds_list_destroy(lista);
Ese script guarda en la sección "coordenadas" del archivo ini una clave con el nombre del objeto y un valor igual a un string que contiene toda la información con las coordenadas.
El siguiente script lee la información y crea las instancias:
//script para leer coordenadas y crear los objetos:
//argument0=object_index del objeto
//argument1=nombre del archivo (sin el .ini)
var lista,n,i,xx,yy;
lista=ds_list_create();
ini_open(argument1+".ini");
ds_list_read(lista,ini_read_string("coordenadas",object_get_name(argument0),""));
n=ds_list_size(lista);//número de datos a leer
for(i=0;i<n;i+=2)
{
xx=lista[| i];//coord. x
yy=lista[| i+1];//coord. y
instance_create(xx,yy,argument0);
}
ds_list_destroy(lista);
Gracias Guacusio! Tú y tus códigos del cielo que me salvan siempre!!! XD XD XD
Funcionó a la perfección...GRACIAS!!! :'( :'( :D :D :D :D :love: