我已经读了很多东西,但我仍然遇到很多问题。
首先,我选择了正确的缩放模式,我的理解是 AspectFit。这是我读过的帖子:
Difference between UIViewContentModeScaleAspectFit and UIViewContentModeScaleToFill?
但即便如此,另一篇文章告诉我们要使用 ResizeFill:
Dealing with different iOS device resolutions in SpriteKit
问题在于,Ipad 上的 SKScene 只能占据屏幕的 1/10,看起来我需要制作 2 个单独的 SKScene,一个用于 Ipad,另一个用于 Iphone。
但是对于 iPad,我在屏幕顶部和底部看到 2 条黑线。然后我看到了这篇文章:
viewWillLayoutSubviews in Swift
我用来更改 View 的是以下代码:
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 实例。通常,该 View 的大小等于[UIScreen mainScreen].size
的大小:
- iPad | 1024*768
- iPad Pro | 1366*1024
- iPhone 4 英寸 | 320*576
- iPhone 4.7 英寸 | 375*667
- iPhone 5.5 英寸 | 414*736
您的SKScene
还有一个size属性指示其视口(viewport)的大小。这是 SpriteKit 渲染场景的尺寸(或者分辨率,如果你愿意的话),以点为单位。
最后要讨论的是scaleMode这就是 SKView 在其内部构建渲染场景的方式。您可以将其视为在其内部构建 UIImage 的 UIImageView,只是我们对 SKScene 的选择较少。 因此,如果您有 576*320 的 View 和尺寸为 1024*768 的 SKScene,则结果是水平拉伸(stretch)的图像。
请注意,当使用 -presentScene:
将 SKScene 添加到 SKView 时,传递的场景大小将调整为 View 大小。
TL;DR
根据您的游戏,您可以拥有 2 个 .sks 文件(一个用于 iPhone,一个用于 iPad)。将每个文件(SKScene 节点)中根对象的大小设置为您的目标设备的大小。无论如何,这就是我最终可能会做的事情。
关于swift - 使用SKScene制作通用应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32618412/