codemonsters / dizzy-balloon

GNU General Public License v3.0
8 stars 0 forks source link

No se está escalando correctamente el canvas principal del juego #6

Closed Autotren closed 4 years ago

Braisa commented 4 years ago

Arreglada (mismo problema que la issue #19).

yagueto commented 4 years ago

El problema no está arreglado, @Braisa . El HUD sigue sin ser visible (ver imagen).

He investigado y he visto que mi resolución de pantalla es de 1280x1024 (5:4)

Captura de pantalla de 2019-10-26 15-29-50

asexto commented 4 years ago

¡La pantalla de Yago es muy cuadrada! Poco frecuente a día de hoy, pero estupendo para las pruebas.

Viendo esa imagen creo que además de corregir posibles errores en el código que compone la zona izquierda del HUD (las vidas restantes, el nivel actual...) deberíamos revisar el algoritmo que utilizamos para establecer el tamaño de la ventana de juego para que en casos como este haga una ventana menos alta (y por tanto más ancha).

Actualmente en el método love.load() del archivo main.lua tenemos:

`

-- scale the window of the game (without changing game width and heigth)
window_width, window_height = love.window.getDesktopDimensions()

if love.window.getFullscreen() == true then
    -- scale the window to match the screen resolution
    log.debug("Escalando en pantalla completa")
else
    -- make the window a bit smaller than the display
    log.debug("Escalando dentro de una ventana")
    window_width, window_height = window_width * .7, window_height * .7
end

` Deberíamos revisar eso para que el HUD también quepa.

asexto commented 4 years ago

He hecho una prueba eliminando la librería push y calculando a mano el factor de escala más adecuado para cada resolución y relación de aspecto. Está todo en el branch "escalado". He cambiado además conf.lua para que la ventana se puede redimensionar libremente. Tiene marcas en los extremos de algunos canvas para comprobar visualmente si todo funciona bien (pequeños circulos y líneas, pendientes de eliminar si finalmente esto nos soluciona el problema).

Lo que hago es escalar y desplazar cada canvas independientemente. El código mantiene actualizadas tres variables (factorEscala, desplazamientoX y desplazamientoY) tanto inicialmente como cuando se redimensiona la ventana. El cálculo está en la función actualizaVariablesEscalado() de main.lua.

Seguramente esta no sea la opción más eficiente ya que de esta forma durante el juego muchas veces estaremos aplicando transformaciones a tres canvas distintos (escalando y desplazando el mundo, el hud y el canvas que pongamos en la parte izquierda de la pantalla). Todavía tiene algunos detalles que pulir pero si @Yagueteiro nos da el visto bueno diciendo que en su monitor funciona entonces arreglaría los problemas que tenemos y además permitiría ejecutar el juego en cualquier resolución.

yagueto commented 4 years ago

¡Hola!

He probado a ejecutar el juego, tal y como @asexto me indicó y este ha sido el resultado:

Pantalla de inicio imagen

Juego imagen He estado mirando un poco y, como se ve en este vídeo está dejando un margen extraño en la parte izquierda de la pantalla. Eso sí, recalcular lo hace bien.

Además, habría que hacer que el margen fuera negro y no blanco por motivos obvios. #

yagueto commented 4 years ago

Una cosa más: en la pantalla de inicio no aparece el margen ese feo, sin embargo en el juego, sí.

Tiene algo que ver con desplazamientox, que no debe estar bien calculado

asexto commented 4 years ago

La zona blanca izquierda es correcto que aparezca. Desde un principio habíamos comentado que ese espacio estaría reservado para el pulgar izquierda del jugador. Se usaría para poner un joystick virtual o algún tipo de feedback visual para que el jugador sepa que desde ese área puede mover al personaje, para lo cual podríamos crear un tercer canvas.

Cierro el bug y publico los cambios en la rama principal. @Yagueteiro, ¡gracias por tus pruebas y por documentar los errores!