SpriteKit 正确的资产大小

Posted

技术标签:

【中文标题】SpriteKit 正确的资产大小【英文标题】:SpriteKit correct asset size 【发布时间】:2015-01-14 09:07:09 【问题描述】:

总结

我正在为不同的设备创建一个 SpriteKit 游戏,我想知道不同资产的大小应该是多少。

我现在拥有的

我正在viewDidLoad 中创建SKScene

scene = GameScene(size: view.bounds.size)
scene.scaleMode = .AspectFill

我不想使用viewWillLayoutSubviews,因为它在启动时被调用两次,而且每次设备旋转时也会被调用。我不认为在这里初始化场景是个好主意。

使用此配置,我的视图被初始化为 600 磅的宽度(默认故事板大小),然后重新调整为设备宽度。在布局视图后使用println(scene.size.width),它在 iPhone 6 中显示 375 磅大小,在 iPhone 6 Plus 中显示 414 磅。

我正在使用 xcassets 来提供背景图片,我想知道我应该使用哪种尺寸。我当前的配置已准备好支持 320 点分辨率(iPhone 4、iPhone 5)

1x:320 像素 2x:640 像素 3x:960 像素

问题

问题是图像将在以下设备中重新缩放:

iPhone 6:750 像素 - 375 点 iPhone 6 Plus:1242 像素 - 414 点 iPad:768 像素 - 768 点 iPad 视网膜:1536 像素 - 768 点

我想知道我应该如何配置图像和 SKScene 大小以针对所有设备进行优化。

【问题讨论】:

viewwilllayout 是推荐的方式,在呈现场景之前只需检查 self.view == nil 同时检查场景 scaleMode 我已经尝试过了,它在第一次调用时将其初始化为 600 像素宽度,然后初始化为正确的 750 (iPhone 6) 宽度。如果我检查场景是否为零,它将被初始化为 600 像素宽度,与 viewDidLoad 中相同。 我可以在viewDidLayoutSubviews 的第一次调用中正确地做到这一点(注意Did 而不是Will)你认为这很好吗想法? 【参考方案1】:

如果你不想初始化场景两次,你可以只初始化一次:

- (void)viewWillLayoutSubviews


    [super viewWillLayoutSubviews];


    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;
    skView.showsDrawCount = YES;
    skView.showsPhysics = YES;
    skView.ignoresSiblingOrder = YES;

    if(!skView.scene)
    // Create and configure the scene.
        GameScene * scene = [GameScene sceneWithSize:skView.bounds.size];

        scene.scaleMode = SKSceneScaleModeAspectFill;

    // Present the scene.
        [skView presentScene:scene];
     

【讨论】:

【参考方案2】:

对于我目前正在进行的一个项目,我决定以尽可能大的分辨率制作我的资产,即 iPhone 6 Plus 之一(2208 x 1242,ios Resolution Reference)。由于 iPhone 6 和 iPhone 5 使用 16:9 的纵横比,因此使用隐式缩小资产是没有问题的

scene.scaleMode = .AspectFit

在 iPad 和 iPhone 4s 上,这会产生边框,但我可以忍受。

【讨论】:

以上是关于SpriteKit 正确的资产大小的主要内容,如果未能解决你的问题,请参考以下文章

带有 Skview 的 ViewController - SpriteKit SKScene

在 SpriteKit 项目中包含一个 UIKit 小游戏

SpriteKit SKScene 未正确调整大小以适合 iPhone 12

SpriteKit 关卡编辑器纹理图集

使用 SpriteKit 的自定义框架 - 未加载资产文件

在 SpriteKit 项目中使用精灵图集、纹理图集或资产目录