2012-03-19 17 views
11

Esta va a ser una de esas preguntas incómodas en busca de una respuesta que probablemente no exista, pero aquí va.Corona SDK Resolución de pantalla del dispositivo cruzado

He estado desarrollando algunos juegos simples usando Corona y aunque la funcionalidad parece funcionar bastante bien en la mayoría de los dispositivos físicos que he probado, el único problema es el diseño. Sé que realmente no se puede construir para cada dispositivo a la perfección, pero me pregunto si existe un método común para hacer que una aplicación se vea bien en tantas pantallas como sea posible. Tengo acceso a estos dispositivos

  • iPad 1 & 2: 4: 3 (1,33)
  • iPhone 960 × 640 3: 2 (1,5)
  • iPhone 480x320 3: 2 (1,5)
  • Galaxy Nexus 16: 9 (1,77)

Por lo que he visto, la gente tratará de utilizar 320x480 como una resolución a escala y luego dejar que la corona de alto nivel para la resolución del dispositivo correcto (con cualquier @ imágenes 2x según sea necesario), pero esto conduce a un letterbox o recorte dependiendo de t la configuración de escala config.lua. Si bien escala correctamente, tener un buzón no es genial.

¿Sería mejor no especificar un ancho de & de altura en el archivo de configuración, sino utilizar algún tipo de comprobación de pantalla al principio para buscar relaciones de aspecto de 1.33/1.5/1.77? Seguramente con el objetivo general de Corona SDK, ¿habría algún tipo de configuración "típica" que los desarrolladores usen para el inicio de cualquier proyecto nuevo?

Gracias

Respuesta

8

Parece que he encontrado una buena solución basada en este mensaje del foro en el sitio web Ansca: http://developer.anscamobile.com/forum/2012/03/12/understanding-letterbox-scalling

En resumen, el config.lua debería tener este aspecto:

application = { 
    content = { 
     width = 320, 
     height = 480, 
     scale = "letterbox", 
     xAlign = "center", 
     yAlign = "center", 
     imageSuffix = { 
     ["@2x"] = 2, 
    }, 
    } 
} 

Crea imágenes de fondo en 360 * 570 para dispositivos más antiguos. Las pantallas de 320x480 recortarán la imagen ligeramente y se escalará muy bien para dispositivos Android anteriores.

Crea imágenes de fondo a 1140 * 720 para retina de iPad y iPhone. De nuevo, estas se escalarán en Android y se recortarán ligeramente en iOS.

A modo de ejemplo, donde normalmente se crea una imagen de 320x480 y mostrarlo con:

local bg = display.newImageRect("bg.png",320x480) 
bg.x = display.contentWidth/2 
bg.y = display.contentHeight/2 

.. lugar crear un fondo de 360x570 y utilizar el siguiente código:

local bg = display.newImageRect("bg.png",360x570) 
bg.x = display.contentWidth/2 
bg.y = display.contentHeight/2 

Este es solo un resumen, así que consulte el enlace para obtener instrucciones más detalladas.

3

Bueno, PUEDE usar un número ligeramente desviado 2 para la escala si desea imágenes correctas para los diferentes dispositivos. Ej:

application = 
{ 
    content = 
    { 
     width = 640, 
     height = 960, 
     scale = "zoomEven", 
     imageSuffix = 
     { 
      ["-iphone3"] = 0.5, 
      ["-ipad2"] = 1.066, 
      ["-ipad3"] = 2.133, 
     }, 
    } 
} 

en el que "background.png" sería una imagen de 640x960 para el iPhone4, mientras que el "fondo-iphone3.png" sería 320x480 (que no necesito esto, pero reducirá la necesidad de memoria para aplicaciones iphone3). "background-ipad3.png" necesitaría ser 1536x2048 (y la otra mitad para -ipad2).

Por supuesto, no resuelve la relación de aspecto para el posicionamiento de la pantalla, pero lo resuelve para todos los demás problemas relacionados con gfx. Recuerde usar display.newImageRect, no display.newImage o no verá ninguna diferencia.

Cuestiones relacionadas