Noviembre 17, 2015, 08:57:56 PM Ultima modificación: Noviembre 18, 2015, 02:22:49 AM por NiuWeb
Hola, vamos al grano:
Quisiera cambiar el width y height de una room, pero cuando vuelva a abrir esa room, no haya guardado los cambios. Me explico:

Estoy creando un juego en el que el jugador diseña su "casa" en una room, y la "casa" se guarda en un .INI, pero solo la posición de los objetos. Se supone que el jugador puede cambiar el tamaño de la room a gusto, y este nuevo tamaño también se almacena en el .INI, pero aquí el problema:

Todas las "casas" o niveles que crea el jugador se crean en una misma room: "rmEditor", la cual es una sala vacía con el controlador que se encarga de permitir agregar los objetos, y cuando modifico el tamaño de esa room con:
[gml]
room_set_width(room,neww);
room_set_height(room,newh;
[/gml]

1)- Tengo que salir y volver a entrar a la room para ver los cambios.
2)- TODOS los niveles se ven afectados, es decir que si abro CUALQUIER nivel, la room se ve con el último cambio de tamaño.


Lo que quiero: El usuario digita el nuevo tamaño, éste se guarda en el .INI y la room cambia su tamaño al digitado por el usuario. Cuando abro un nivel, la room cambia su tamaño por el que está guardado en el .INI. Pero si se crea un nuevo nivel, la room tenga el tamaño por defecto (2048,1474). A ver si me expliqué...xD ???

NOTA: Ya sé que al momento de cerrarse el juego, las room vuelven a su tamaño original, pero ese no es el caso...xD Sólo lo dije por si acaso...xD...xD
alaberga regué el café.

BA:STFW&RTFM

#1 Noviembre 17, 2015, 09:11:27 PM Ultima modificación: Noviembre 17, 2015, 09:34:26 PM por penumbra
Hay cosas confusas o contradictorias.

Cita de: NiuWeb en Noviembre 17, 2015, 08:57:56 PM
y la "casa" se guarda en un .INI, pero solo la posición de los objetos.
OK, sólo se guarda la posición de los objetos.

Cita de: NiuWeb en Noviembre 17, 2015, 08:57:56 PM
y este nuevo tamaño también se almacena en el .INI
OK, no, ¿entonces también se guarda el tamaño de la casa y no solamente la posición, como decía el enunciado anterior?

1 ¿Cómo guardas el tamaño de la habitación en el ini?
2 'Cómo cargas el tamaño de X habitación?

Si dices que si abres cualquier habitación, y todas se muestran con el último tamaño, o estás guardando mal o estás cargando mal. Si quieres que cada habitación conserve un tamaño especificado, tendrías que guardar cada tamaño de cada habitación, ¿no?

El título dice que quieres alterar las dimensiones de la habitación de manera NO PERMANENTE, entonces, ¿por qué quieres guardar esa información en el ini?
Cita de: NiuWeb en Noviembre 17, 2015, 08:57:56 PM
Lo que quiero: El usuario digita el nuevo tamaño, éste se guarda en el .INI
Al guardarlo, se supone que será permanente, no?

Me parece que si usas room_width = X, la habitación cambiará inmediatamente al tamaño indicado, sin necesidad de salir y volver a entrar

Por ejemplo, si la room actualmente es de 800 X 600 y quiero cambiar el tamaño a 1024X768 al presionar la tecla "Q"

EVENTO KEYPRESS Q
[gml]
room_width = 1024
room_height = 768
window_set_size(room_width, room_height );
[/gml]

#2 Noviembre 17, 2015, 09:33:38 PM Ultima modificación: Noviembre 17, 2015, 09:36:03 PM por NiuWeb
Cita de: penumbra en Noviembre 17, 2015, 09:11:27 PM
Hay cosas confusas o contradictorias.

Cita de: NiuWeb en Noviembre 17, 2015, 08:57:56 PM
y la "casa" se guarda en un .INI, pero solo la posición de los objetos.
OK, sólo se guarda la posición de los objetos.

Cita de: NiuWeb en Noviembre 17, 2015, 08:57:56 PM
y este nuevo tamaño también se almacena en el .INI
OK, no, ¿entonces también se guarda el tamaño de la casa y no solamente la posición, como decía el enunciado anterior?

Cuando me refiero a sólo la posición de los objetos no me refiero a que en el .INI sólo se guarda eso, tal vez me expliqué mal, pero me refiero a que en el ini guarda la posición de ellos para recrearlos o "cargarlos" sin usar game_save
Algo así:
obj1: x=32 y=32

Mas nunca intenté decir que en el .INI SÓLO SE GUARDARÍAN LOS OBJETOS, sino que DE LOS OBJETOS, SÓLO SE GUARDAN SUS POSICIONES


Cita de: penumbra en Noviembre 17, 2015, 09:11:27 PM
1 ¿Cómo guardas el tamaño de la habitación en el ini?
2 'Cómo cargas el tamaño de X habitación?

Algo así:
[gml]Para guardar:

ini_open("algo.ini")
ini_write_real("Sala","Width",room_width);
ini_write_real("Sala","Height",room_height);
ini_close();
[/gml]

[gml]Para cargar:

ini_open("algo.ini")
ww = ini_read_real("Sala","Width",2048);
hh = ini_read_real("Sala","Height",1474);
ini_close();
room_set_width(room,ww);
room_set_height(room,hh);
[/gml]


Cita de: penumbra en Noviembre 17, 2015, 09:11:27 PM
Si dices que si abres cualquier habitación, y todas se muestran con el último tamaño, o estás guardando mal o estás cargando mal. Si quieres que cada habitación conserve un tamaño especificado, tendrías que guardar cada tamaño de cada habitación, ¿no?
Bueno, en eso tienes razón...creo



Cita de: penumbra en Noviembre 17, 2015, 09:11:27 PM
El título dice que quieres alterar las dimensiones de la habitación de manera NO PERMANENTE, entonces, ¿por qué quieres guardar esa información en el ini?
Cita de: NiuWeb en Noviembre 17, 2015, 08:57:56 PM
Lo que quiero: El usuario digita el nuevo tamaño, éste se guarda en el .INI
Al guardarlo, se supone que será permanente, no?
Eso es porque a NO PERMANENTE me refiero a lo que dije hace poco, al usar las funciones room_set(...) convierte las dimensiones de la room, y si la voy a abrir desde otra parte, ésta tendrá las dimensiones que le di con room_set(...).


Cita de: penumbra en Noviembre 17, 2015, 09:11:27 PM
Me parece que si usas room_width = X, la habitación cambiará inmediatamente al tamaño indicado, sin necesidad de salir y volver a entrar


Hace algún tiempo, lo intenté. Y me apareció un error que decía algo como: The variable room_width is READ ONLY.
Pero si eso ya ha cambiado, lo intentaré y lo más probable sea que funcione...xD
alaberga regué el café.

BA:STFW&RTFM

Cita de: NiuWeb en Noviembre 17, 2015, 09:33:38 PM
Hace algún tiempo, lo intenté. Y me apareció un error que decía algo como: The variable room_width is READ ONLY.
Pero si eso ya ha cambiado, lo intentaré y lo más probable sea que funcione...xD
Acabo de probar el código que está al final de mi primer comentario, y funciona sin problemas. El cambio en el tamaño es automático.

Entonces podría guardar y cargar del .INI las variables room_width & room_height sin problemas ¿verdad?
alaberga regué el café.

BA:STFW&RTFM

Cita de: NiuWeb en Noviembre 17, 2015, 09:42:46 PM
Entonces podría guardar y cargar del .INI las variables room_width & room_height sin problemas ¿verdad?
Sí, porque en cuanto se lean los valores del ini, la habitación puede reescalarse a dichos valores en automático. Eso sí, ten en cuenta que hay cosas que van a requerir ajustes. Por ejemplo, si la habitación era más pequeña, y se hace más grande, entonces, quizás el fondo que se estaba usando no alcance a cubrir toda el área de la nueva habitación (queda chico), por lo que tendrás que solucionar esas cosas.

También ten en cuenta que al cambiar de tamaño una habitación, GM no actualiza automaticamente el tamaño de la application surface, por lo que si algo se ve mal (deforme, más alargado o más estrecho), tienes que reajustar manualmente el tamaño de la A. S. mediante surface_resize()

Muchas gracias, Penumbra, por responder... :D
alaberga regué el café.

BA:STFW&RTFM