Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: kostra en Octubre 26, 2015, 09:47:54 AM

Título: [Solusionao] muchas variables contador sin estar en la room
Publicado por: kostra en Octubre 26, 2015, 09:47:54 AM
Buenas, a ver si puedo explicarme... tengo unos bonitos arbolitos, que tienen que crecer, para eso le puse una variable que cada X tiempo pase la image_index (osea, crece un poquito xD)... el caso es, que quisiera que no parara de crecer aun estando en otra room, usar globales va ser que no, puesto a que la variable debe crearse, al crearse el objeto del arbol y cada arbol crece a diferente linea de tiempo, y lo mismo, hay un árbol, que hay 3, como si hay 500...

solo necesito saber de qué manera puedo hacerlo fuera de la room, no que me digan cómo hacer un contador jaja (solo aviso por si acaso, el crecimiento ya está echo y derecho xD)

Mouchísimas garcías! :B
Título: Re:muchas variables contador sin estar en la room
Publicado por: penumbra en Octubre 26, 2015, 10:25:22 AM
Tienes que crear una manera de guardar el estado de cada instancia árbol. Y sí, si tienes 500 árboles, tienes que guardar 500 "estados". El estado se puede guardar en un arreglo, estructuras como listas, grids o mapas, o en un ini/txt.

Por ejemplo, en un arreglo bidimensional GLOBAL de nombre status, cada fila correspondería a un registro para una instancia de un árbol
[gml]
i = 0
with(obj_arbol)
{
    status[i, 0] = x         // Guardar coordenada x
    status[i, 1] = y         // Guardar coordenada y
    status[i, 2] = image_index  //o en su defecto una variable que indique en qué etapa de crecimiento está el árbol
    i++
    numero_arboles++         // Llevar la cuenta de cuántos árboles hay
}
[/gml]
Este arreglo se llenaría justo antes de salir de la habitación con árboles. Luego, en un evento evento room start se crearían los árboles y se leería el arreglo para recuperar su estado último. (Tanto el llenado del arreglo como la lectura, se efectuarían desde un objeto persistente)
[gml]
var arbol = noone;
i = 0
if (numero_arboles > 0) and (room = room_arboles)
for (i=0; i < numero_arboles; i++)
{
     arbol = instance_create(blah blah blah)
     arbol.x = status[i, 0]
     arbol.y = status[i, 1]
     arbol.image_index = status[i, 2]
}
[/gml]

Como es de suponer, el tiempo que se esté en otra habitación, se debe calcular cuánto va creciendo cada árbol y sumar/actualizar el grado de crecimiento en el arreglo, para que una vez que se regrese a la habitación con árboles, el crecimiento se refleje en cada árbol. Si quieres ser más preciso y manejar una linea de tiempo distinta para cada árbol, entonces adicionalmente se debería guardar un valor de tiempo en el arreglo (para cada instancia del árbol) y considerar este tiempo en la fórmula de crecimiento que manejes.

¿Qué valor de tiempo guardar? Eso depende del programador, por ejemplo, pueden usarse las funciones de fecha y hora de GML para guardar el momento en que una instancia árbol se creó. Una manera más sencilla sería llevar un contador de pasos que indique cuántos pasos han transcurrido desde que una instancia árbol se creó.

Sé que usar un arreglo no es la solución más elegante, pero el código sólo es para ejemplificar una idea base
Título: Re:muchas variables contador sin estar en la room
Publicado por: kostra en Octubre 27, 2015, 01:00:48 AM
Me sabe mal responder esto por lo que te has currado tu respuesta, pero pensando y pensando he llegado a la conclusión de que en varias cosas que tendrá este proyecto la mejor manera de hacerlo es usar una sola room cortada en areas y cambiar la view en vez de cambiar de room xD, en serio muchísimas gracias por tu esfuerzo T_T