这将是寻找可能不存在的答案的尴尬问题之一,但是这里有。
我一直在使用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图像),但这会导致信箱或裁剪,具体取决于config.lua比例设置。虽然它确实可以正确扩展,但有一个信箱并不是很好。
那么我最好不要在配置文件中指定宽度和高度,而是首先使用某种屏幕检查来查找1.33 / 1.5 / 1.77的宽高比?当然,就Corona SDK的重点而言,开发人员可以使用某种“典型”设置来开始任何新项目吗?
谢谢
看来我已经在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设备,它可以很好地缩放。
为iPad和iPhone视网膜创建1140 * 720的背景图像 - 这些也将在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,
},
}
}
其中“background.png”将是iphone4的640x960图像,而“background-iphone3.png”将是320x480(你不需要这个,但它会减少iphone3应用程序的内存需求)。 “background-ipad3.png”需要1536x2048(和-ipad2的一半)。
当然它没有解决屏幕定位的宽高比,但它解决了所有其他gfx相关问题。记得使用display.newImageRect,而不是display.newImage或者你不会看到任何区别。