swift - 使用SKScene制作通用应用程序

标签 swift sprite-kit skscene

我已经读了很多东西,但我仍然遇到很多问题。

首先,我选择了正确的缩放模式,我的理解是 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/

相关文章:

ios - 核心数据值快速访问错误

ios - Swift Today Extension preferredContentSize 不调整大小

ios - 从特定图集 Sprite-kit 加载所有文件

ios - 调用 SKLabelNode 时延迟?

warnings - 关闭时的 UIAlertView 警告

ios - 更改场景时是否必须删除场景?

swift 2.0 : sort instead of sorted function

swift - 数组作为 swift 语言中的字典值

ios - 如何引用和声明 UINavigationController 的自定义方法

swift - 无法将类型 'SKSpriteNode' 的值转换为 myApp.CustomSprite