Corona SDK Кросс Разрешение экрана устройства
Это будет один из тех неудобных вопросов, которые ищут ответ, который, вероятно, не существует, но вот он.
Я разрабатывал несколько простых игр с использованием Corona, и хотя функциональность, кажется, работает довольно хорошо на большинстве физических устройств, на которых я тестировал, одна главная проблема-это макет. Я знаю, что вы не можете построить идеально для каждого отдельного устройства, но мне интересно, есть ли общий метод, чтобы приложение выглядело хорошо на таком количестве экранов, как возможный. У меня есть доступ к этим устройствам
- 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)
Из того, что я видел, люди стремятся использовать 320x480 в качестве масштабируемого разрешения, а затем позволяют Corona масштабироваться до правильного разрешения устройства (с любыми изображениями @2x по мере необходимости), но это приводит к буквенной обработке или обрезке в зависимости от конфигурации.настройка шкалы lua. В то время как он делает масштаб правильно, имея почтовый ящик-это не очень хорошо.
Так что было бы лучше не указывать ширину и высоту в файле конфигурации, а вместо этого использовать какую-то проверку экрана сначала, чтобы искать 1.33 / 1.5 / 1.77 пропорции? Конечно, со всем смыслом Corona SDK, была бы какая-то "типичная" установка, которую разработчики используют для начала любого нового проекта?
Спасибо
2 ответа:
Похоже, что я нашел довольно хорошее решение, основанное на этом посте форума на веб-сайте Ansca: http://developer.anscamobile.com/forum/2012/03/12/understanding-letterbox-scalling
В общем, конфигурация.lua должен выглядеть так:
application = { content = { width = 320, height = 480, scale = "letterbox", xAlign = "center", yAlign = "center", imageSuffix = { ["@2x"] = 2, }, } }
Создание фоновых изображений на 360*570 для старых устройств. Экраны 320x480 будут слегка обрезать изображение, и оно будет хорошо масштабироваться для старых устройств Android.
Создание фоновых изображений на 1140*720 для iPad и iPhone retina-опять же они будут масштабироваться на Android и будут немного обрезаны на iOS.
В качестве примера, где вы обычно создаете изображение 320x480 и отображаете его с помощью:
local bg = display.newImageRect("bg.png",320x480) bg.x = display.contentWidth/2 bg.y = display.contentHeight/2
.. вместо этого создайте фон 360x570 и используйте следующий код:
local bg = display.newImageRect("bg.png",360x570) bg.x = display.contentWidth/2 bg.y = display.contentHeight/2
Это всего лишь резюме, поэтому проверьте ссылку для получения более подробной инструкции.
Ну, вы можете использовать число немного от 2 для масштабирования, если вы хотите правильные изображения для различных устройств. Пример:
application = { content = { width = 640, height = 960, scale = "zoomEven", imageSuffix = { ["-iphone3"] = 0.5, ["-ipad2"] = 1.066, ["-ipad3"] = 2.133, }, } }
В котором "фон.png "будет представлять собой изображение 640x960 для iphone4, в то время как" фон-iphone3.png " будет 320x480 (вам это не нужно, но это уменьшит потребность в памяти для приложений iphone3). "фон-ipad3.png " должен быть 1536x2048 (и половина этого для-ipad2).
Конечно, это не решает соотношение сторон для экрана позиционирование, но оно решает его для всех других проблем, связанных с gfx. Не забудьте использовать дисплей.newImageRect, а не дисплей.новое изображение или вы не увидите никакой разницы.