Hola, estoy intentando guardar en un ini scores de diferentes pantallas, viendo si el score es superior al que ya existia, y me funciona, pero segun mi modo he llegado a la conclusion que deberia hacer un objeto para cada pantalla, lo que yo busco es que en key se pueda meter una variable, que yo modificaria en cada pantalla para que se guarden ordenadamente.

Este codigo me valdria para la primera pantalla, para la 2º deberia cambiar el key a 2.
ini_open("savegame.ini");
Puntuacion = ini_read_real("Score","1",0)
if (Puntuacion<score){ini_write_real("Score","1",score)}
Puntuacion = ini_read_real("Score","1",0)
ini_close();


He intenado creando una variable global que cambiara en cada pantalla y ponerla en key pero no he conseguido que funcione.

pant=global.pant
ini_open("savegame.ini");
Puntuacion = ini_read_real("Score",pant,0)
if (Puntuacion<score){ini_write_real("Score",pant,score)}
Puntuacion = ini_read_real("Score",pant,0)
ini_close();


Debo hacer un controlador que cambie el key para cada pantalla o hay una mejor solucion??
gracias.



Hola.
Recuerda que para declarar una variable global debes seguir esta sintaxis:

global.VARIABLE = something;

Te doy un tip. Para el score guardalo en una variable global. global.score = 0;
Ya solo lo aplicas al .ini asi cuando quieras poner un score solamente cambias la variable globa y la guardas.

#2 Julio 18, 2014, 10:09:29 PM Ultima modificación: Julio 18, 2014, 10:11:35 PM por penumbra
¿A qué te refieres con pantallas? ¿Te refieres a habitaciones/rooms? Pregunto porque en el manual y el argot GMLesco no hay referencias a pantalla1, pantalla2, pantalla3, etc, sino a habitaciones. Las vistas también están numeradas, pero no veo que tenga relación con lo que quieres hacer.

Según entiendo, en tu juego el marcador en cada room es independiente, es decir, cada room tiene su propio juego y/o sistema de puntaje. Suponiendo que esto es lo que quieres hacer, el ini debería tener una estructura como esta (al principio, antes de jugar una partida):
[NIVEL]
1=0
2=0
3=0
4=0
5=0

Una sección NIVEL en donde 1 es la clave correspondiente al primer nivel, y a la derecha del signo igual está el puntaje máximo. Si estás usando la variable predefinida score, entonces score debería limpiarse (ponerse en cero) al iniciar cada habitación, porque el marcador de la habitación anterior no tiene relación con el de la nueva. Eso suponiendo que entendí bien, si no, pues habría que ver. También necesitarías una variable que lleve la cuenta del nivel en donde se está, y usar esa variable para leer y escribir la llave correcta del INI.

Tu variable global.pant la tienes que definir al comienzo del room, en el evento room start (suponiendo, como penumbra, que cuando dices "pantalla" te refieres a un room). Explícanos mejor por qué no te ha funcionado para ayudarte (es decir, dinos cómo y dónde es que le das un valor a global.pant).


#4 Julio 19, 2014, 11:11:15 AM Ultima modificación: Julio 19, 2014, 11:19:20 AM por canuto120
Yo te entiendo perfectamente, que sepas que es un poco locura segun cuantos pantallas(niveles/rooms) tenga tu juego, lo suyo es que en el evento de colision por ejemplo, cuando el objeto bala colisiona con un objeto enemigo que esta en la primera pantalla/nivel global.scorenivel1 += 20;

Primero de todo yo crearia un script por ejemplo script_globals donde meteria todas las variables que quiero guardar en mi archivo .ini
Por ejemplo:


ini_open("savegame.ini");
global.scorenivel1 =  ini_read_real("puntuacion","nivel1",0)
global.scorenivel2 =  ini_read_real("puntuacion","nivel2",0)
global.scorenivel3 =  ini_read_real("puntuacion","nivel3",0)
ini_close();


Yo lo que hago es crear una room (la primera de todas) y creo un objeto que me cargue las variables y despues me mande al pantalla principal del juego: obj_load---> step ---> y en control creo un script, por ejemplo:

Script_globals();
room_goto(rm_mainmenu);


Ahora vamos cuando x objeto colisiona con otro objeto que da puntuacion en el nivel 1:

score += 20;
if global.scorenivel1 <= score
{
global.scorenivel1 += 20;
ini_open("savegame.ini");
ini_write_real("puntuacion","nivel1",global.scorenivel1)
ini_close();
}


No se si te funcionara no lo he probado y soy algo novato, para cada pantalla creo que algo asi funcionará:

if room = rm_nivel1
{
score += 20;
if global.scorenivel1 <= score
{
global.scorenivel1 += 20;
ini_open("savegame.ini");
ini_write_real("puntuacion","nivel1",global.scorenivel1)
ini_close();
}
}
if room = rm_nivel2
{
score += 20;
if global.scorenivel2 <= score
{
global.scorenivel2 += 20;
ini_open("savegame.ini");
ini_write_real("puntuacion","nivel2",global.scorenivel2)
ini_close();
}
}


Recuerda añadir un objeto a cada pantalla que de a score un valor 0 "score = 0;"

Ya te digo que soy algo novato y no he probado el codigo asi que facilmente puede no funcionar correctamente, espero que si hay alguien que entienda mas que yo pueda añadir o corregir cualquier error que haya tenido.
Los limites los pones tu

ini_read_real(section,key,default)  -- porque no escribis en key el nombre del nivel y en default el score ?? . Asi por cada nivel solo se agregaria una linea al archivo ini y solo necesitarias un solo objeto para todos los niveles que guarde y lea la puntuacion por nivel. No lo he probado pero en teoria estoy seguro que se puede. Una variable que contenga el nombre del room y otra la puntuacion.

Pues ahora que lo dices... XD tambien creo que deberia de funcionar.
Los limites los pones tu