SpriteKit有助于理解缩放

时间:2014-12-04 01:43:19

标签: objective-c sprite-kit

使用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.widthscreenScale = [[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

1 个答案:

答案 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。

enter image description here

enter image description here

在我的代码中,我有一个简单的函数来决定我要加载哪个纹理图集。

func getTextureAtlas(filename: String) -> SKTextureAtlas {
    var name = filename
    if UIDevice.currentDevice().userInterfaceIdiom != .Phone {
        name = "\(name)-ipad"
    }

    return SKTextureAtlas(named: name)
}

示例用法:

shipAtlas = getTextureAtlas("ship")