使用 SKScene 制作通用应用程序
Using SKScene to make an universal app
我已经读了很多东西,但我仍然有很多问题。
首先,我选择了正确的 Scalemode,在我看来是 AspectFit。这是我阅读的post:
Difference between UIViewContentModeScaleAspectFit and UIViewContentModeScaleToFill?
但即便如此,另一个 post 告诉我们使用 ResizeFill:
Dealing with different iOS device resolutions in SpriteKit
问题是 Ipad 上的 SKScene 只占屏幕的 1/10,看起来我需要制作 2 个单独的 SKScene,一个用于 Ipads,另一个用于Iphone.
但对于 Ipad,我仍然在屏幕顶部和底部看到 2 条黑线。然后我看到了这个 post:
viewWillLayoutSubviews in Swift
我用来改变视图的是这段代码:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let scene = Level(fileNamed: "Level")
scene!.scaleMode = .AspectFit
let transition = SKTransition.fadeWithDuration(0.5)
self.view?.presentScene(scene!, transition: transition)
}
通用应用使用SKScene的正确做法是什么?我已经在使用 Atlas 获取@x1、@x2 和@3 图像。我的 SKScene 大小是 480x320,从我读到的是构建通用应用程序的最佳大小。
我最近尝试将我的 iPad 应用程序转换为通用应用程序,我可以对此进行一些说明。
您需要考虑多种尺寸。首先,view
尺寸。这是您为了呈现 SKScene 而订购的 SKView 实例。通常,此视图的大小等于 [UIScreen mainScreen].size
的大小:
- iPad | 1024*768
- iPad临| 1366*1024
- iPhone4" | 320*576
- iPhone 4.7" | 375*667
- iPhone 5.5" | 414*736
您的 SKScene
也有一个 size 属性 指示其视口的大小。这是 SpriteKit 渲染场景的 点 中的大小(或分辨率,如果你愿意的话)。
最后要讨论的是 scaleMode 这就是 SKView 如何在其内部构建渲染场景。您可以将其视为 UIImageView 在其内部构建 UIImage,只是我们对 SKScene 的选择较少。
因此,如果您有 576*320 的视图和大小为 1024*768 的 SKScene,则结果是水平拉伸的图像。
请注意,当使用 -presentScene:
将 SKScene 添加到 SKView 时,传递的场景大小会调整为视图大小。
TL;DR
根据您的游戏,您可以拥有 2 个 .sks 文件(一个用于 iPhone,一个用于 iPad)。将每个文件(SKScene 节点)中的根对象的大小设置为您定位的设备的大小。无论如何,这就是我最终可能会做的事情。
我已经读了很多东西,但我仍然有很多问题。
首先,我选择了正确的 Scalemode,在我看来是 AspectFit。这是我阅读的post:
Difference between UIViewContentModeScaleAspectFit and UIViewContentModeScaleToFill?
但即便如此,另一个 post 告诉我们使用 ResizeFill:
Dealing with different iOS device resolutions in SpriteKit
问题是 Ipad 上的 SKScene 只占屏幕的 1/10,看起来我需要制作 2 个单独的 SKScene,一个用于 Ipads,另一个用于Iphone.
但对于 Ipad,我仍然在屏幕顶部和底部看到 2 条黑线。然后我看到了这个 post:
viewWillLayoutSubviews in Swift
我用来改变视图的是这段代码:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let scene = Level(fileNamed: "Level")
scene!.scaleMode = .AspectFit
let transition = SKTransition.fadeWithDuration(0.5)
self.view?.presentScene(scene!, transition: transition)
}
通用应用使用SKScene的正确做法是什么?我已经在使用 Atlas 获取@x1、@x2 和@3 图像。我的 SKScene 大小是 480x320,从我读到的是构建通用应用程序的最佳大小。
我最近尝试将我的 iPad 应用程序转换为通用应用程序,我可以对此进行一些说明。
您需要考虑多种尺寸。首先,view
尺寸。这是您为了呈现 SKScene 而订购的 SKView 实例。通常,此视图的大小等于 [UIScreen mainScreen].size
的大小:
- iPad | 1024*768
- iPad临| 1366*1024
- iPhone4" | 320*576
- iPhone 4.7" | 375*667
- iPhone 5.5" | 414*736
您的 SKScene
也有一个 size 属性 指示其视口的大小。这是 SpriteKit 渲染场景的 点 中的大小(或分辨率,如果你愿意的话)。
最后要讨论的是 scaleMode 这就是 SKView 如何在其内部构建渲染场景。您可以将其视为 UIImageView 在其内部构建 UIImage,只是我们对 SKScene 的选择较少。 因此,如果您有 576*320 的视图和大小为 1024*768 的 SKScene,则结果是水平拉伸的图像。
请注意,当使用 -presentScene:
将 SKScene 添加到 SKView 时,传递的场景大小会调整为视图大小。
TL;DR
根据您的游戏,您可以拥有 2 个 .sks 文件(一个用于 iPhone,一个用于 iPad)。将每个文件(SKScene 节点)中的根对象的大小设置为您定位的设备的大小。无论如何,这就是我最终可能会做的事情。