将 SKScene 添加到 UIViewController?

Posted

技术标签:

【中文标题】将 SKScene 添加到 UIViewController?【英文标题】:Adding an SKScene to a UIViewController? 【发布时间】:2015-10-15 19:08:16 【问题描述】:

我刚刚在界面生成器中创建了一个新的UIViewController。它与UITableViewController(单元格)相连。我现在想在这个UIViewController 中使用SKScene。这是如何实现的?

顺便说一句……

如果SKScene 占据了整个UIViewController.view,您可以在场景顶部覆盖UIKit 对象吗?

或者最好在UIViewController.view 内部创建一个单独的UIView 来保存SKScene,然后围绕这个单独的UIView 布局UIKit 对象,并让默认的UIViewController.view 充当所有这些元素的容器?如果采用这种方式,理论上讲这些UIKit对象可以被SKScene访问吗?

【问题讨论】:

这里可以参考我的教程博客:xcodenoobies.blogspot.com/2016/11/… 【参考方案1】:
    将 SKView 添加到您的 viewController。 将 SKScene 添加到您的 SKView。

您可以从您的 SKScene 中覆盖 UIKit 项目。这就是我在游戏中使用集合和表格视图的方式。但是,它们需要作为子视图添加到持有您的 SKScene 的 SKView 上。

SKScene has a view property that should hold a reference 到它所包含的 SKView。所以只需要做这样的事情。

class MyScene: SKScene 
    var someView: UIView

    override func didMoveToView(view: SKView) 
        someView = //setup view here
        view.addSubview(someView)
    

然后在这个场景中,你可以在任何你喜欢的地方访问你的 UIKit 对象。

【讨论】:

【参考方案2】:

如果您创建一个新的 Spritekit 应用程序,它会根据您的需要设置视图控制器。您需要做的就是将该视图控制器复制到您的项目中,应用 segue,然后您就可以很好地使用 skscene。

回答你关于 UIKit 的问题,是的,你可以将 UIKit 元素放在 SKScene 之上,当然它只会被攻击到 skscene 所在的视图,因此场景本身不能直接与它们交互,您需要实现某种消息传递系统,以便两者能够通信。

【讨论】:

以上是关于将 SKScene 添加到 UIViewController?的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit SKScene 添加 AVCaptureVideoPreviewLayer CALayer 作为背景不起作用

SceneKit中的SKScene

无法在 Swift 游乐场中向 SKScene 添加滑动识别器?

将目标添加到 UIButton 以进行超级视图

UITextField 在 SKScene 上不可见

如何阻止 iAds 在 xcode 中扭曲 SKScene?