Siguiendo con la pregunta de las relaciones de aspecto , me interesa saber qué usan otras personas cuando trabajan en sistemas de interfaz de usuario 2D (muy probablemente sus propias soluciones locales). Específicamente, cómo maneja los sistemas de coordenadas. En mi opinión, hay tres opciones:
- Coordenadas codificadas (p. Ej .: 0 -> 720, 0 -> 576)
- Coordenadas normalizadas (0.0 -> 1.0, 0.0 -> 1.0), mapeadas en coordenadas reales antes de renderizar
- Coordenadas virtuales (p. Ej .: 0 -> 1600, 0 -> 1000), mapeadas en coordenadas reales antes de renderizar
Obviamente, la codificación estricta solo es útil si se encuentra en una plataforma fija y sabe de antemano cuáles son las coordenadas del espacio de su pantalla, o si está preparado para crear diseños de pantalla para cada conjunto posible de dimensiones de pantalla.
Las coordenadas normalizadas son agradables, pero sufren de ambigüedad cuando la relación de aspecto de la pantalla no es fija (por ejemplo, 0,75 asigna una coordenada física diferente cuando se ejecuta en pantalla panorámica que en 4: 3). Además, para los autores, es realmente contradictorio declarar que un elemento de la interfaz de usuario es (0.2 x 0.2), solo para descubrir que en realidad no es cuadrado cuando se representa.
Las coordenadas virtuales no son ambiguas, pero sufren los mismos problemas que las coordenadas normalizadas en la etapa de reasignación: una pequeña discrepancia decimal puede dar lugar a errores fuera de uno, lo que significa que los elementos de la interfaz de usuario que ahora deberían tener una costura entre ellos.
Del mismo modo, cuando tiene una pantalla de resolución fija, las coordenadas tanto normalizadas como virtuales significan que es muy difícil garantizar un mapeo 1: 1 entre los píxeles finamente diseñados de su artista en la imagen de la interfaz de usuario y los píxeles en la pantalla, lo que significa que corre el riesgo de artefactos de escala desagradables (suponiendo que esté renderizando como quads texturizados en la pantalla).
Hemos seguido el enfoque de coordenadas virtuales, específicamente para evitar la ambigüedad sobre las relaciones de aspecto. Entonces, cuando se procesa en una pantalla de 16:10, el espacio de la interfaz de usuario es (0,0) -> (1600,1000), pero cuando se renderiza a 4: 3, el espacio de la interfaz de usuario utilizable es en realidad (133,0) -> (1467 , 0).
¿Hay alguna solución mejor de la que no esté al tanto? ¿Existen buenas estrategias para minimizar los problemas que tienen estos 3 enfoques?
Mucho depende del tipo de juego y la situación. Para prototipos rápidos y sucios, prefiero planificar la interfaz de usuario en papel cuadriculado, escribir una lista de coordenadas numéricas para un tamaño de ventana fijo y codificar todo: es más fácil y rápido para mí. Pero para un proyecto "real" en el que desea ventanas redimensionables o resoluciones de pantalla alternativas, eso obviamente no sería lo ideal, y sería mejor algún tipo de solución que permita escalar en ambas direcciones.
fuente