Objective c SpriteKit有助于理解缩放

Objective c SpriteKit有助于理解缩放,objective-c,sprite-kit,Objective C,Sprite Kit,使用SpriteKit制作一个只有肖像的游戏,并将我的图像资源放入Images.xcasets。这是针对iPhone的,因此我的图像资产的设置如下: 1x, 2x, Retina 4 2x, 3x 例如,在一个图像资源(2x)下,我有一个640x640 png,这非常适合iPhone 4/4s、5/5s,但在6(也可以缩放为2x)上则不适合,因为6在750px(或375点)下有一个稍宽的屏幕。因此,我提出了以下公式,我可以将其传递到我添加到场景中的每个精灵的[mySprite setScale

使用SpriteKit制作一个只有肖像的游戏,并将我的图像资源放入
Images.xcasets
。这是针对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.xcsets
而不是创建用于特定屏幕分辨率的单个.atlas?我应该关注上采样和下采样,还是iphone6/6+本身可以神奇地自动处理


参考:

iphone6的分辨率足够接近iphone5,因此它要使用2倍的图像

1136 x 640-iphone5

1334 x 750-iphone 6

因为你的背景有640像素高,所以在纵向模式下,它的顶部和底部会缺少一些空间。你需要在较小的设备(iPhone4和5)上用你不介意被切断的区域制作背景。或者你需要在iphone 6上的游戏周围有一个黑色边框。我不建议缩放每个图像

甚至在iphone6出现之前,这也是一个常见的问题。这张图片显示了我在说什么

图像大小

您需要三种图像大小

@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")

注册iPhone6和“只缩放2倍图像”——它实际上是在放大它们,还是你的意思是2倍图像只适合其中?因为我没有6,所以我用Sim卡来查看事物的外观,而没有任何东西可以缩放,尽管它确实从我的2倍资产中提取(自然)。很抱歉,我误解了你最初的问题。我已经更新了我的答案。我明白了,所以做法是让图像资产更大,以便它们(排序)适合不同的屏幕?在@2x的情况下,我会制作一个1136x640(背景示例),然后将其加载到1024x768和960x640设备上?我认为这是可以接受的图像,可能不太重要,但若你们需要精确的图像,比如说一个棋盘,那个么它必须适合或缩放。在这种情况下,如果我使用640x640棋盘,我可以应用我的公式使精灵精确地适应屏幕,以及缩放x、y位置。你的答案增加了价值,但如果不需要有边框,则必须应用缩放,同意吗?Ray的图像示例(你的链接)将其带回家,谢谢。如果你绝对需要100%的屏幕作为缩放可播放区域,那么我想你需要使用缩放。但在棋盘的情况下,我只需要棋盘所在的背景(桌子或其他东西),而不是可玩区域的一部分。