使用SpriteKit创建仅限肖像的游戏,并将我的图片资源放入Images.xcassets
。这适用于iPhone,因此我的图像资源设置如下:
1x, 2x, Retina 4 2x, 3x
例如,在一个图像资产下,一个2x,我有一个640x640 png,这适合iPhone 4 / 4s,5 / 5s但是6(它也可以缩放@ 2x)它没有,因为6有一个稍宽的屏幕@ 750px(或375点)。所以我想出了以下公式,我可以为我添加到场景中的每一个精灵传递给[mySprite setScale:]
。
CGFloat scale = screenPointWidth / (screenScale * 160)
screenPointWidth = [[UIScreen mainScreen] bounds].size.width
和screenScale = [[UIScreen mainScreen] scale]
的位置。 160
是指基本1x像素宽度值(或320/2
)。这将返回一个比例多人游戏。
这款多人游戏应用我的640x640图像比例尺,完美适合750宽屏幕。
我的问题:有没有更好的方法来做到这一点,或者我做得对吗?是否有我应该使用的通用缩放设置,或者我应该根据我的公式缩放每个精灵和精灵位置?或者,我应该不使用Image.xcassets
而是为特定的屏幕分辨率创建单独的.atlas'吗?我应该关注上采样和下采样,还是由iPhone 6/6 +本身自动处理?
参考:http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
答案 0 :(得分:1)
iPhone 6与iPhone 5的分辨率足够接近它意味着使用2x图像。
1136 x 640 - iphone5
1334 x 750 - iphone 6
由于背景为640像素高,因此在纵向模式下顶部和底部会丢失一些空间。您需要在不小的设备(iphone 4和5)上关注区域的背景。或者你需要在iPhone 6的游戏周围设置一个黑框。我不建议缩放每个图像..
即使在iphone 6出现之前,这也是一个常见问题。这张图片显示了我正在谈论的内容
http://cdn5.raywenderlich.com/wp-content/uploads/2013/09/Aspect-Ratio-Diff.jpg
图片尺寸
您需要三种图像尺寸。
@ 2x = iphone4s,5,5s,6(你也用这个非视网膜ipads)
@ 3x(1.5 * 2x)= iphone 6 PLUS
@ 2x~ipad(2 * 2x)= ipad视网膜和视网膜迷你
您想要组织这种方式取决于您。在我的游戏中,我将图像分成两组地图集。一个用于iPad,一个用于Iphone。
我组织地图册的方式
没有后缀的图像适用于非视网膜ipads。
在我的代码中,我有一个简单的函数来决定我要加载哪个纹理图集。
func getTextureAtlas(filename: String) -> SKTextureAtlas {
var name = filename
if UIDevice.currentDevice().userInterfaceIdiom != .Phone {
name = "\(name)-ipad"
}
return SKTextureAtlas(named: name)
}
示例用法:
shipAtlas = getTextureAtlas("ship")