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