Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Missy en Diciembre 11, 2017, 06:23:51 PM

Título: Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: Missy en Diciembre 11, 2017, 06:23:51 PM
¿Cómo hago para detectar y saber cuál es la resolución del dispositivo del jugador?

Lo que quiero hacer es que, cuando sepa la resolución que usa el jugador, y entre en modo pantalla completa entonces se le cambie la resolución de pantalla y se modifiquen las VIEWS, para que así el jugador siga conservando el mismo tamaño, solo que únicamente el mapa se vería más amplio cuanta más resolución tuviese el jugador.
Título: Re:Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: bygdle en Diciembre 14, 2017, 12:16:29 PM
http://docs.yoyogames.com/source/dadiospice/002_reference/windows%20and%20views/display_get_width.html
http://docs.yoyogames.com/source/dadiospice/002_reference/windows%20and%20views/display_get_height.html
Título: Re:Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: Missy en Diciembre 14, 2017, 02:42:47 PM
Cita de: NiuWeb en Diciembre 14, 2017, 12:16:29 PM
http://docs.yoyogames.com/source/dadiospice/002_reference/windows%20and%20views/display_get_width.html
http://docs.yoyogames.com/source/dadiospice/002_reference/windows%20and%20views/display_get_height.html

El problema me surge cuando intento modificar las views vía código, el programa al iniciar el fullscreen se adapta a las views de la room actual, pero al cambiar de room se estrechan y no hacen caso absoluto a las nuevas views
Título: Re:Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: bygdle en Diciembre 14, 2017, 03:02:04 PM
Si no me equivoco, debes redimensionar también la Application surface. Recuerdo que una vez hice algo similar, y por ahí iba la cosa, pero no estoy seguro :v.
Título: Re:Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: Clamud en Diciembre 15, 2017, 05:36:53 PM
Sí, se debe modificar el tamaño de la application surface y quizá también el tamaño de la GUI
[gml]
surface_resize(application_surface, w, h);
display_set_gui_size(w, h);
[/gml]
Título: Re:Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: Missy en Diciembre 17, 2017, 11:07:24 PM
lo que quiero hacer es modificar el view_xview[0] y el view_yview[0] según el tipo de resolución que tenga el jugador
entonces por ejemplo en una resolución de 1366x768 sería x=1070 y=550
Mi pregunta es... ¿Tengo que asignar manualmente resolución por resolución como quiero que se vea el x y el y, o hay alguna operación matemática que me ahorre trabajo?
Título: Re:Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: 3dgeminis en Diciembre 18, 2017, 04:58:28 AM
Mmm, queres cambiar el tamaño de la view o la posicion ?
Título: Re:Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: emanuelsko en Diciembre 18, 2017, 01:31:37 PM
Prueba este código que en teoría tendría que funcionar.

En un evento create coloca lo siguiente.

///Desactivamos las surfaces
application_surface_enable(false);

//Se define el tamaño de la vista nativa de nuestro juego
view_wview[0]=640; //Debes remplazar ese valor por el ancho de tu view
view_wport[0]=360; //Debes remplazar ese valor por el alto de tu view

//Establecemos las siguientes variables para que el juego adapte automáticamente la altura del view según el ancho fijo
ancho = display_get_width();
alto = display_get_height();

ratio = ancho / alto;
view_hview[0] = view_wview[0]/ratio;
view_hport[0] = view_hview[0];


Por último, en las configuraciones globales tienes que desmarcar "Keep aspect Ratio" por "Full Scale".
Se puede pulir aún más pero creo que es un inicio para comenzar a probar como se comporta el código en tu juego.
Título: Re:Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: Missy en Diciembre 18, 2017, 03:33:27 PM
Cita de: 3dgeminis en Diciembre 18, 2017, 04:58:28 AM
Mmm, queres cambiar el tamaño de la view o la posicion ?

Quiero cambiar la posición, no el tamaño. El código para tamaño sería Width y Height, pero yo quiero modificar el x y el y (view_xview[0] y  view_yview[0])

(https://image.prntscr.com/image/ZHzoFw5iReaXCNBQZ6-qYQ.png)

Cita de: emanuelsko en Diciembre 18, 2017, 01:31:37 PM
Prueba este código que en teoría tendría que funcionar.

En un evento create coloca lo siguiente.

///Desactivamos las surfaces
application_surface_enable(false);

//Se define el tamaño de la vista nativa de nuestro juego
view_wview[0]=640; //Debes remplazar ese valor por el ancho de tu view
view_wport[0]=360; //Debes remplazar ese valor por el alto de tu view

//Establecemos las siguientes variables para que el juego adapte automáticamente la altura del view según el ancho fijo
ancho = display_get_width();
alto = display_get_height();

ratio = ancho / alto;
view_hview[0] = view_wview[0]/ratio;
view_hport[0] = view_hview[0];


Por último, en las configuraciones globales tienes que desmarcar "Keep aspect Ratio" por "Full Scale".
Se puede pulir aún más pero creo que es un inicio para comenzar a probar como se comporta el código en tu juego.
Ese código lo que hace es redimensionar, y yo estoy pidiendo modificar el x y el y, ya tengo el código y las variables declaradas, solo necesito saber si hay alguna forma de centrar la view siempre en un punto en concreto y que no se mueva de ese punto, que siga con la misma resolución.

Para que os hagáis una idea...

800x600 se vería el menú completo:
(https://image.prntscr.com/image/GR4YnO88Q8S4FvlGtegxmw.png)

1366x768 se vería esta parte:
(https://image.prntscr.com/image/vHQTRagJSN6lN1OkvUWG0Q.png)

Lo suyo sería centrar todo en un mismo punto, en un centro: (Flecha amarilla)
(https://image.prntscr.com/image/G86SEZ81S_ylGCPJsPepfw.png)


Mi idea es que estés en la resolución que estés el menú se vea en el centro de la pantalla (O sea que se quede estético, sin modificar su tamaño, un menú de 800x600 que ni se amplia ni se redimensiona ni nada, está fijado, lo único que cambiaría sería la posición de la x y de la y de las views para que se vea en el centro de la pantalla del jugador, agradecería si alguien me puede explicar alguna fórmula, como yo no entiendo de dimensiones de pantalla dudo que haya una fórmula concreta para poder ajustarlo automáticamente al centro, pero de todos modos pregunto por si acaso. (El código ya lo había hecho, solo tengo que aplicar el nuevo x y el nuevo y de la resolución de usuario, eso es lo que me falta, hallar la posición nueva de las views según el tipo de resolución del usuario)
Título: Re:Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: emanuelsko en Diciembre 18, 2017, 07:39:14 PM
Ok, ahora ya entiendo mejor. Entonces lo que quieres es que el menú aparezca siempre en el centro de la pantalla sea cual sea la resolución?

Para eso puedes obtener el alto y ancho de las view y dividirlas por dos.


instance_create(view_wview[0]/2, view_hview[0]/2, obj_menu);


view_wview[0]/2 lo que hace obtener el ancho exacto de la view y dividirlo en dos
view_hview[0]/2 lo que hace obtener el alto exacto de la view y dividirlo en dos

Teniendo eso ya puedes crear el menu exactamente en el centro de la pantalla.

Claro que para que funcione correctamente, el pivote del sprite de tu menu debe estar centrado.
Título: Re:Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: Missy en Diciembre 18, 2017, 07:48:34 PM
Cita de: emanuelsko en Diciembre 18, 2017, 07:39:14 PM
Ok, ahora ya entiendo mejor. Entonces lo que quieres es que el menú aparezca siempre en el centro de la pantalla sea cual sea la resolución?

Para eso puedes obtener el alto y ancho de las view y dividirlas por dos.


instance_create(view_wview[0]/2, view_hview[0]/2, obj_menu);


view_wview[0]/2 lo que hace obtener el ancho exacto de la view y dividirlo en dos
view_hview[0]/2 lo que hace obtener el alto exacto de la view y dividirlo en dos

Teniendo eso ya puedes crear el menu exactamente en el centro de la pantalla.

Claro que para que funcione correctamente, el pivote del sprite de tu menu debe estar centrado.

¿No habría alguna forma de modificar solo la posición de las views?
Crear un instance no solucionaría mi problema, principalmente porque al cambiar de modo fullscreen a modo ventana no invoca de nuevo el item, habría que configurar que todos los items se borren y se recreen de nuevo y esto sería un verdadero desastre en el código de programación, por no decir que hay como unos 40 items del menú que se descuadrarían también.
Título: Re:Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: 3dgeminis en Diciembre 19, 2017, 01:51:21 AM
La formula general seria : (tamaño de la view/2) - (tamaño del sprite/2)
Eso en el caso de que el origen del sprite sea 0,0.
Título: Re:Detectar resolución de pantalla del jugador y aplicarla al juego
Publicado por: Missy en Diciembre 19, 2017, 03:50:44 PM
Cita de: 3dgeminis en Diciembre 19, 2017, 01:51:21 AM
La formula general seria : (tamaño de la view/2) - (tamaño del sprite/2)
Eso en el caso de que el origen del sprite sea 0,0.
el origen no es 0,0.
Si te refieres a la esquina del tileset, es 1346x625
Si te refieres al centro del tileset es 1752x891

Y no sé a que te refieres con el tamaño de la view.

PD: He probado la formula manualmente, con un sprite en la posición 0,0 y con ella no llego a ninguna conclusión, creo que no nos estamos entendiendo bien:

Supongo que la formula que me querías dar sería esta que acabo de crear.
ResoluciónFullscreen - ResoluciónMinimizada = z
z / 2 = z2
x + z2 = Final

¡Gracias por el código, gracias a tu código me diste una idea de cómo realizar la operación!