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