【问题标题】:SpriteKit help understanding scalingSpriteKit 帮助理解缩放
【发布时间】:2014-12-09 02:27:48
【问题描述】:

使用 SpriteKit 制作一个仅限肖像的游戏,并将我的图像资源放入 Images.xcassets。这是针对 iPhone 的,所以我的图片资源是这样设置的:

1x, 2x, Retina 4 2x, 3x

例如,在一个图像资源下,一个 2x,我有一个 640x640 png,这在 iPhone 4/4s、5/5s 上非常适合,但在 6(也可以缩放 @ 2x)上它不适合,因为 6屏幕稍宽 @ 750 像素(或 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

【问题讨论】:

    标签: objective-c sprite-kit


    【解决方案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(你也可以将它用于非视网膜 ipad)

    @3x (1.5 * 2x) = iphone 6 PLUS

    @2x~ipad (2 * 2x) = ipad 视网膜和视网膜迷你

    您想要组织它的方式取决于您。在我的游戏中,我将图像分成两组图集。一个用于 iPad,一个用于 Iphone。

    我组织图集的方式

    无后缀的图片适用于非视网膜 ipad。

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

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

    示例用法:

    shipAtlas = getTextureAtlas("ship")
    

    【讨论】:

    • Reg iPhone 6 和“仅缩放 2x 图像”——它实际上是否将它们放大,或者您的意思是 2x 图像只是适合其中?因为我没有 6,所以我使用 Sim 来查看事物的外观并且没有任何缩放,尽管它​​确实从我的 2x 资产中提取(自然)。
    • 对不起,我误读了您的原始问题。我已经更新了我的答案。
    • 我明白了,所以做法是使图像资产更大,以便它们(排序)适合不同的屏幕?在@2x 的情况下,我会制作一个 1136x640(背景示例),然后将其加载到 1024x768 和 960x640 设备上?我认为这对于可能不太重要的图像是可以接受的,但是如果您需要精确的图像,例如棋盘,那么它必须适合或缩放。在这种情况下,如果我使用 640x640 棋盘,我可以应用我的公式来使精灵精确地适应屏幕,同时缩放 x、y 位置。您的回答增加了价值,但如果不希望有边框,则必须应用缩放,同意吗?
    • Ray 的图片示例(您的链接)将其带回家,谢谢。
    • 如果你绝对需要 100% 的屏幕作为可缩放的可播放区域,那么我想你需要使用缩放。但是在棋盘的情况下,我只需要棋盘所在的背景(桌子或其他东西),而不是可玩区域的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2021-08-17
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多