Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: poposo en Enero 11, 2016, 08:56:52 PM

Título: Adaptar views a distitntas resoluciones de celulares
Publicado por: poposo en Enero 11, 2016, 08:56:52 PM
Estoy intentando adaptar las views de mi juego dependiendo de la relacion-aspecto de la pantalla del celular que lo reporodusca. Para ello tomamos en cuenta las 6 o 7 relaciones aspecto mas comunes que existen, como 4-3 o 16-9 y una vez definidas en el codigo presentamos un caso para cada una de ellas y en cada caso usamos la funcion room_set_view para definir el tamaño de la view:

else if (round(newaspect) = 13)//rojo 4:3
{
    room_set_view(Main_Menu,0,true,0,144,1600,900,0,0,display_get_width(),display_get_height(),0,0,0,0,-1)
    room_set_view_enabled(Main_Menu,true)
}
(newaspect es el aspecto x 10 , esto lo hice para que al redondear(round) me diferencie los distintos aspectos)

El problema puntualmente es que tanto este como otros metodos por codigo que hemos implementados pareciera que no tienen prioridad por sobre las opciones manuales de las views que nos da game maker. O por lo menos eso es lo que pensamos que puede estar sucediendo, tambien tenemos la duda sobre la opcion ¨enabled use of views¨ , tiene que estar activada o no para este caso ?
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: bygdle en Enero 11, 2016, 09:00:27 PM
¿Cómo vas a probar el juego en celulares con Game Maker 8? :-[ :-\ XD
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: poposo en Enero 11, 2016, 09:03:53 PM
le erre al icono :-[ :'(
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: bygdle en Enero 11, 2016, 09:06:45 PM
Sí le has pillao xD
Bueno, hace unos escasos minutos he escrito lo mismo en otro post XD

Puedes poner una view, y cambiar el wport y el hport (¡OJO!, el wPORT, no el wVIEW, porque con el wview y hview sólo achicas lo que se muestra de la room en pantalla, no achicas las dimensiones en realidad)
Algo así:

[gml]
view_wport[0] = display_get_gui_width();
view_hport[0] = display_get_gui_height();
[/gml]

Y si quieres adaptarlo con las relaciones de aspecto, haz algunas divisiones, ahora mismo no estoy en condiciones de pensar mucho xD (Sin dormir 3 días xD), así que dale un poco de cabeza. Si algo, preguntas de nuevo
:-[ :'(
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: poposo en Enero 11, 2016, 09:44:17 PM
No entiendo bien , lo que me decis que es que tengo que cambiar el port con wport y hport segun el caso ? . Usando siempre la misma view ? . El enabled use os views tiene que estar activado o no ? .
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: bygdle en Enero 11, 2016, 09:58:03 PM
Sí, debes tener activadas las view para que se puedan midificar y los cambios sean visibles.
Te explico lo de wport y hport:
Si usar los arrays view_wview y view_hview, lo harás mal, ya que estas variables equivalen al tamaño de la "sección" de la room que se muestra en pantalla, ejemplo, esto:
(https://i.gyazo.com/845426ac8334b4eb9866b13e3c3654c9.png)

Y si usas esos arrays: Digamos que la room mide 1280*720. Si un dispositivo tiene esas mismas dimensiones, se verá la room completa. Pero si tiene 640*360 (la mitad), sólo se verá la mitad de la room. Pero el tamaño real del juego no cambiará y el rendimiento será igual de malo.

Pero si usas el wport y el hport, es diferente, porque no estás cambiando la parte de la room que se muestra, sino el tamaño real.

Por ejemplo, digamos en windows porque es más fácil explicarlo:

Tu room mide 1280*720, tu wview y hview miden lo mismo, y el wport y hport también.
El resultado, se verá toda la room en una ventana de 1280*720

Tu room mide 1280*720, tu wview y hview miden 640*360, y tu wport y hport miden lo mismo que la room.
El resultado, se verá la mitad de la pantalla en una ventana de 1280*720

Tu room mide 1280*720, tu wview y hview miden lo mismo, y el wport y hpor miden 640*360.
El resultado, se verá toda la room en una ventana de 640*360.

Sabiendo esto, serás capaz de entender el porqué se usa view_hport y view_wport.
Y sí, debe usarse la misma view en ambos arrays, pero no tiene que ser la view 0. Cambia el índice del array view_hport[0] y view_wport[0] al que quieras. El índice es el número de la view a modificar
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: poposo en Enero 11, 2016, 10:37:10 PM
Entiendo ! El unico problema que tengo es que el gm me esta tomando los indices manuales y no lo que escribo en codigo. Como configuro para que tome lo que codifique en lugar de los valores por default ? . Y como indico el numero de view (me dijiste que no use la 0) que debe usar ? . Parece que aunque use view_hport[1] me tomara por default la 0
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: bygdle en Enero 11, 2016, 10:41:09 PM
Queé?
¿Cómo que te ignora el índice?
Intenta hacer pruebas, cambia el tamaño (sólo un poco) de todas las views y al momento en el que quieras adaptar la resolución (cualquiera menos STEP o DRAW), escribe:

[gml]
show_message(string(view_wport[1]) + ":" + string(view_hport[1]));
[/gml]
Eso mostrará un mensaje con las resoluciones. Comprueba que las que muestra sean las que debería tener la view 1. De lo contrario... CHAN CHAN CHAN...no tendría ni idea de qué sucede

PD: Mira que la view 1 esté visible y activada
EDIT: otra cosa, no dije que no se podía ser la view 0, sino que no necesariamente debe ser la 0
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: Clamud en Enero 12, 2016, 12:47:11 AM
Además, en GMS es muy importante re-escalar la application_surface para que la imagen no se deforme.
http://docs.yoyogames.com/source/dadiospice/002_reference/surfaces/application_surface.html (http://docs.yoyogames.com/source/dadiospice/002_reference/surfaces/application_surface.html)
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: poposo en Enero 13, 2016, 10:30:07 PM
Hola de nuevo , estoy intentando hacerlo como vos me decis , adaptando los port para cada caso y utilizando una misma view. Con el siguiente codigo
funciona casi bien:

show_message("port:"+ string(view_wport[1]) + ":" + string(view_hport[1]));
show_message("view:"+string(view_wview[1]) + ":" + string(view_hview[1]));
else if (round(newaspect) = 17)// 5:3
{
    view_visible[1] = true
    view_hview[1] = 960
    view_wport[1] = 1600
    view_hport[1] = 960
    show_message("port:"+ string(view_wport[1]) + ":" + string(view_hport[1]));
    show_message("view:"+string(view_wview[1]) + ":" + string(view_hview[1]));
}
el celular tiene una resolucion de 800x480
el room es de 1600 x 1200
la view es de 1600:900 pero tengo que cambiar el valor hview a 960 para que el port no sea mayor a la view.
los 2 primeros show_message muestran  port:1600 x 900 y view:1600x900
los show_message que estan dentro de la condicion me muestran port:1600x960 y view 1600x960.

El problema es que cuando la room se ejecuta me muestra la pantalla con 2 barras negras arriba y abajo y mas raro aun , cuando cambio de room y vuelvo a la room en cuestion las barras desaparecen y se ve teoricamente bien con los mismos show_messages que describi arriba .

En una prueba le puse un valor irrisorio al wport(3) y hport(7) y salvo el cambio en los show messages despues todo siguio igual... por eso creo que no me esta tomando los valores de wport y hport  y no entiendo porque ??? ???
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: bygdle en Enero 13, 2016, 10:34:49 PM
mmm...no logro entender a qué te refieres sólo con descripciones textuales :-[
¿Puedes enviar capturas de pantalla del error en un antes:después?

Otra cosa, por favor (en serio te lo estoy rogando xD) encierra tu código con las etiquetas [gml] y [/gml] para que lo pueda entender mejor sin quedar ciego XD
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: poposo en Enero 13, 2016, 10:56:59 PM
Hola de nuevo , estoy intentando hacerlo como vos me decis , adaptando los port para cada caso y utilizando una misma view. Con el siguiente codigo
funciona casi bien:
[gml]
show_message("port:"+ string(view_wport[1]) + ":" + string(view_hport[1]));
show_message("view:"+string(view_wview[1]) + ":" + string(view_hview[1]));
else if (round(newaspect) = 17)// 5:3
{
    view_visible[1] = true
    view_hview[1] = 960
    view_wport[1] = 1600
    view_hport[1] = 960
    show_message("port:"+ string(view_wport[1]) + ":" + string(view_hport[1]));
    show_message("view:"+string(view_wview[1]) + ":" + string(view_hview[1]));
}[/gml]


el celular tiene una resolucion de 800x480
el room es de 1600 x 1200
la view es de 1600:900 pero tengo que cambiar el valor hview a 960 para que el port no sea mayor a la view.
los 2 primeros show_message muestran  port:1600 x 900 y view:1600x900
los show_message que estan dentro de la condicion me muestran port:1600x960 y view 1600x960.

El problema es que cuando la room se ejecuta me muestra la pantalla con 2 barras negras arriba y abajo

https://drive.google.com/file/d/0ByV5FtEdheT_UVBoalNwZ2VQZzQ/view?usp=sharing (https://drive.google.com/file/d/0ByV5FtEdheT_UVBoalNwZ2VQZzQ/view?usp=sharing)

y mas raro aun , cuando cambio de room y vuelvo a la room en cuestion las barras desaparecen y se ve teoricamente bien con los mismos show_messages que describi arriba .
https://drive.google.com/file/d/0ByV5FtEdheT_aXNSQjBWMG9oa3c/view?usp=sharing (https://drive.google.com/file/d/0ByV5FtEdheT_aXNSQjBWMG9oa3c/view?usp=sharing)

En una prueba le puse un valor irrisorio al wport(3) y hport(7) y salvo el cambio en los show messages despues todo siguio igual... por eso creo que no me esta tomando los valores de wport y hport  y no entiendo porque ??? ???
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: bygdle en Enero 13, 2016, 11:02:35 PM
1)- estás encerrando el código primero con [code] y luego con [gml] xD, debes escribir tu código sólo con las etiquetas [gml] para que esa etiqueta funcione

2)- Lo que puedo deducir de tu error, es que estás modificando el hview, y no el hport, ya que la view está tomando un pedazo más pequeño de la room, pero se mantiene la ventana del mismo tamaño (hport)...Aunque todas son deducciones porque estás mostrando tu código incompleto. Le hace falta un pedazo, porque hay un else if sin antes haber un if :-[
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: poposo en Enero 13, 2016, 11:09:57 PM
El hview lo modifique en ese caso xq la view , es mas chica que el port . Probe sin modificarla y me pasa lo mismo... incluso como te comente arriba probe solamente igualando el wport a 3 y el hport a 7 (valores ridiculos :-[) y sigue mostrandoce como en las fotos del coment anterior :P.
El else if es para el caso en que el celular sea de 800*480 como te comente arriba , los otros if no interfieren son para otras resoluciones de celulares..
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: bygdle en Enero 13, 2016, 11:25:22 PM
¿En qué evento ejecutas ese código?
Acabo de recordar que hace un tiempo se explicó en alguna parte de este foro que las views se cargaban después del create, o algo así, no recuerdo.

Si lo tienes en <create>, intenta hacer lo siguiente:
1)- Primero, copia todo el código de adaptación de resoluciones al evento alarm 0, y en <create> sólo dejas esto:
[gml]
alarm[0] = 2;
[/gml]

A ver si es eso
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: poposo en Enero 13, 2016, 11:30:04 PM
SI , se me habia ocurrido que podia ser por eso el cambio de la primera visualizacion a la segunda... , el codigo lo tengo en el creation code del room. Lo pruebo poniendolo en una controladora con una alarma ?
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: bygdle en Enero 13, 2016, 11:30:38 PM
Te dije que sí! xD
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: poposo en Enero 13, 2016, 11:46:43 PM
No funciona xq la controladora se dispara despues de la creacion del room me parece , si escribo el codigo en una nueva room inicial usando la funcion room_set_view para que modifique la view antes que se cree la room Menu que hasta ahora era la inicial creo que podria llegar a funcionar . Que te parece ? :-[
Título: Re:Adaptar views a distitntas resoluciones de celulares
Publicado por: bygdle en Enero 13, 2016, 11:50:24 PM
Cita de: poposo en Enero 13, 2016, 11:46:43 PM
No funciona xq la controladora se dispara despues de la creacion del room me parece
Bueno, la intención original de mi idea fue exactamente por eso.
Imagina: Tienes el código en el creation code. El creation code se ejecuta antes de las propiedades de la view. Primero se cambia el tamaño de las view en el creation code, y cuando se ejecutan las propiedades, las view vuelven a quedar como por defecto
Si no te funciona, deberías intentar poner la alarma a un máximo de 5 steps, y si ni así funciona, qué te digo...usa el room_set_view, a ver si con eso sirve...