Agosto 09, 2020, 03:29:25 AM Ultima modificación: Septiembre 06, 2020, 07:45:31 PM por cristopher2545
hola a todos! lindo día el que hay afuera!


tengo un pequeño problema y espero tenga solución y que puedan ayudarme :) porque ya le di vueltas hasta el cansancio, tengo una variable llamada:

global.score=0

esta variable guarda los puntos del jugador durante la partida hasta ahi todo correcto me gustaria tener 3 variables cada cierto tiempo estas 3 variables congelen la puntuacion algo asi como recordar la puntuacion que tenias en ese momento usando la variable global.score pero sin que cambie ninguna de la svariables congeladas por ejemplo

global.score=500

global.score_congelado= global.score // en este caso eran 500

si el jugador gana mas puntos por ejemplo

global.score=700

recordando que el anterior score era 500 entonces

global.score=700

global.score_congelado= global.score // en este caso eran 500
global.score_congelado2= global.score // en este caso eran 700

espero los ejemplos ayuden la idea es usar una variable base, y congelar o guardar en ciertos momentos ese valor sin que se modifique una vez guardado, ojala puedan hecharme una mano! o si esto es posible porque creo estoy soñando mucho! de antemano gracias!
Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!

#1 Agosto 09, 2020, 09:26:49 AM Ultima modificación: Agosto 09, 2020, 09:28:26 AM por Tylag
Buenas,
Lo primero de todo ten cuidado con llamar a tus variables igual que algunas palabras reservadas del Game Maker, en este caso score es una variable built-in, si intentas llamar a tu variable de esta forma: global.score ,al intentar compilar el proyecto deberia darte un error.

Te recomiendo no usar una variable global por cada score que quieras guardar, yo usaría un array, lista, mapa, lo que sea para almacenarlo. en lugar de tener global.score_congelado, global.score_congelado2, global.score_congelado3, etc, etc...

Algo así:


[gml]
//CREATE
global.my_score = 0;
global.scores_congelados = ds_list_create();
[/gml]


[gml]
//STEP
if (global.my_score >=500 && is_undefined(global.scores_congelados [| 0])) {
   ds_list_add(global.scores_congelados , 500);
}

if (global.my_score >=700 && is_undefined(global.scores_congelados [| 1])) {
   ds_list_add(global.scores_congelados , 700);
}
[/gml]

De este modo tendrias almacenado en la posicion 0 y 1 de tu lista los valores 500 y 700, pudiendo ampliar la lista lo que quieras.
Luego si quieres mostrar u operar con estos valores solo tendrias que acceder a la posicion de la lista que quieras.

Por cierto, ¿puede ser que no te estuviese funcionando porque estabas pisando continuamente el valor de global.score_congelado?
Si tenías algo así:

[gml]
if (global.score >500)
global.score_congelado= global.score;
[/gml]

global.score_congelado se estaría actualizando constantemente al valor de global.score

Espero que te sirva, un saludo.


Cita de: Tylag en Agosto 09, 2020, 09:26:49 AM
Buenas,
Lo primero de todo ten cuidado con llamar a tus variables igual que algunas palabras reservadas del Game Maker, en este caso score es una variable built-in, si intentas llamar a tu variable de esta forma: global.score ,al intentar compilar el proyecto deberia darte un error.

Te recomiendo no usar una variable global por cada score que quieras guardar, yo usaría un array, lista, mapa, lo que sea para almacenarlo. en lugar de tener global.score_congelado, global.score_congelado2, global.score_congelado3, etc, etc...

Algo así:


[gml]
//CREATE
global.my_score = 0;
global.scores_congelados = ds_list_create();
[/gml]


[gml]
//STEP
if (global.my_score >=500 && is_undefined(global.scores_congelados [| 0])) {
   ds_list_add(global.scores_congelados , 500);
}

if (global.my_score >=700 && is_undefined(global.scores_congelados [| 1])) {
   ds_list_add(global.scores_congelados , 700);
}
[/gml]

De este modo tendrias almacenado en la posicion 0 y 1 de tu lista los valores 500 y 700, pudiendo ampliar la lista lo que quieras.
Luego si quieres mostrar u operar con estos valores solo tendrias que acceder a la posicion de la lista que quieras.

Por cierto, ¿puede ser que no te estuviese funcionando porque estabas pisando continuamente el valor de global.score_congelado?
Si tenías algo así:

[gml]
if (global.score >500)
global.score_congelado= global.score;
[/gml]

global.score_congelado se estaría actualizando constantemente al valor de global.score

Espero que te sirva, un saludo.


perdona por la tardanza colega pero me sirvió de maravilla pude hacer todo un sistema usando tu código y te lo agradezco mucho!
Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!