Estoy trabajando en un juego 2D simple. He terminado la versión del teléfono móvil.
Sin embargo, mi jefe quiere que el juego funcione en su RT. Estoy haciendo la "conversión" pero mis botones están en los lugares equivocados, porque codifiqué el tamaño de la pantalla, de esta manera:
texture = game.Content.Load<Texture2D>("StartScreen");
mainFrame = new Rectangle(0, 0, game.GraphicsDevice.Viewport.Width, game.GraphicsDevice.Viewport.Height);
// button definitions
startbrect = new Rectangle(300, 258, 88, 88);
startbtext = game.Content.Load<Texture2D>("bplay");
En este ejemplo, mainframe
está bien, pero startbrect
no lo está, porque definí el tamaño para que coincida con la pantalla de un teléfono con Windows. ¿Cómo puedo manejar el diseño receptivo cuando todas las pantallas de los teléfonos con Windows 8 son diferentes? ¿Hay una fórmula o macro para calcular cada vez que el buen tamaño?
c#
2d
resolution
Gabson
fuente
fuente
Respuestas:
Utilizo un tamaño de pantalla de referencia y escalo todo de acuerdo con él, manteniendo la proporción de todo igual.
Para asegurarse de que el juego se vea bien en resoluciones con proporciones sustancialmente diferentes a las de su resolución de referencia, defina un "área jugable" que se ajuste a cualquier tipo de pantalla y coloque todas las imágenes críticas del juego allí. Rellene todo fuera de él con el fondo. Por lo general, mi área jugable de referencia es tan grande como el tamaño de la pantalla de referencia.
En las orientaciones de retrato, calculo el (nuevo) área jugable para que la pantalla se llene verticalmente, y el espacio que ocupa horizontalmente es tan grande como se requiere para mantener la relación. En las orientaciones horizontales, lleno la pantalla horizontalmente y mantengo la relación cuando configuro el tamaño vertical.
Para obtener más información, consulte http://en.wikipedia.org/wiki/Safe_area_(television) ya que es un concepto similar, si no idéntico.
fuente
Creo que el enfoque más fácil y natural para los diseños independientes de resolución es un esquema relativo (porcentaje). Desde el principio, no trabaje con la resolución real, sino solo en un cuadrado uniforme [0,1] x [0,1] siempre que sea posible.
Eso significa que para una posición relativa dada
screen_size
y una dadaobject_size
y dada(px, py)
(por ejemplo (0.5, 0.5) para el centro de la pantalla), la esquina superior izquierda del objeto se calcula mediante:La idea debe ser clara. Una abstracción lista sería
y cada posición se define entonces por
(cxi, cyi)
. Por este se podrían colocar objetos en esquinas con o sin bordes, etc.Asegúrese de que el tamaño de los elementos individuales (botones, etiquetas, ...) también esté escalado.
fuente
Especialmente para MonoGame, tengo una solución independiente de la plataforma para este problema llamada IRR (Renderizador de resolución independiente). Tiene un uso muy simple:
Crear IRR en el método Initialize ()
_irr = nueva ResoluciónRenderer (esto, VirtualResolutionWidth, VirtualResolutionHeight, _gfx.PreferredBackBufferWidth, _gfx.PreferredBackBufferHeight);
La descripción está aquí: http://panthernet.ru/forum/index.php?/topic/17-monogamexna-examples-v14/?p=44
El código está aquí: https://github.com/panthernet/Monogame-Examples
fuente