如何指示使用 UIKit 从 SKScene 创建的视图?

2023-12-14

我有一个名为“MainScene.swift”的 SKScene 文件,并在其上创建了一个按钮,供用户跳转到另一个页面。另一个页面不是由 SpriteKit 创建的,而是由 UIKit 创建的。这种情况下如何指明目标页面并编写代码呢?

如果我使用 SpriteKit 创建两个页面,那么当跳转到另一个场景时,我通常会这样做。

override func viewDidLoad() {
    super.viewDidLoad()

    let scene = MainScene(size: CGSize(width: 750, height: 1334))
    let skView = self.view as! SKView

    scene.scaleMode = .AspectFit
    skView.presentScene(scene)
}

当我在使用 UIKit 创建的场景上执行相同的操作时,在“身份”列中键入情节提要 ID,然后编写如下代码;我只知道使用故事板的方法。

class ViewController: UIViewController {
    @IBAction func gotoNewPage(sender: AnyObject) {
        let nextVC = self.storyboard?.instantiateViewControllerWithIdentifier("newPage")
    presentViewController(nextVC!, animated: false, completion: nil)    
    }
}

但是,当在 SKScene 和 UIKit 创建的场景之间尝试相同的操作时,我不知道如何从前一个场景中指定后者;我不坚持使用故事板。如果有什么简单的方法请告诉我。先感谢您。


这听起来像是委托模式的工作。 为LevelScene添加协议;

// LevelScene.swift
protocol LevelScene : class {
    var gameDelegate: GameDelegate? { get set }
}

添加GameDelegate协议;

// GameDelegate.swift
protocol GameDelegate : class {
    func gameOver()
}

在 mainScene 中添加协议引用并创建一个名为 gameDelegate 的属性;

class MainScene: SKScene, LevelScene {
    weak var gameDelegate: GameDelegate?
}

在您的 GameViewController 中添加协议引用并实现所需的协议函数 - 在本例中,它称为 gameOver 并像往常一样连接到您的 UIKit 视图;

class GameViewController: UIViewController, GameDelegate {
    func gameOver() {
        self.performSegue(withIdentifier: ExitGameSegueKey, sender: self)
    }
}

呈现场景时将delegate设置为gameViewController;

scene.gameDelegate = self

然后在mainScene中需要时调用委托函数;

self.gameDelegate?.gameOver()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何指示使用 UIKit 从 SKScene 创建的视图? 的相关文章

随机推荐