Noticias

¡Ayuda a la Comunidad GM, haz una donación!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: variables con memoria [SOLUCIONADO]  (Leído 465 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cristopher2545

en: Agosto 09, 2020, 03:29:25 am
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!
« última modificación: Septiembre 06, 2020, 07:45:31 pm por cristopher2545 »

Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Tylag

Respuesta #1 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í:


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


//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);
}

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í:

if (global.score >500) 
global.score_congelado= global.score;

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

Espero que te sirva, un saludo.

« última modificación: Agosto 09, 2020, 09:28:26 am por Tylag »

 
Los siguientes usuarios dieron las gracias a este tema: cristopher2545


Desconectado cristopher2545

Respuesta #2 en: Septiembre 06, 2020, 07:45:17 pm
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í:


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


//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);
}

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í:

if (global.score >500) 
global.score_congelado= global.score;

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!