下面,我有两种半种不同的方式使用视图控制器和SKScene设置游戏。我还花了一半时间,但我希望其他解决方案之一能起作用。
下面更详细地描述的是:
MainViewController-> GameViewController(保存SKScene)
GameViewController(保存SKScene)-使用协议
0.5两个SKScenes /两个swift自定义类。
1号
MainViewController-> GameViewController(保存SKScene)
当游戏在SKScene中结束时-我想关闭GameViewController并返回MainViewController。
我没有运气去工作。我曾尝试过关闭视图控制器,而最近一次是使用以下命令关闭SKScene(在SKScene中:
self.view?presentScene(nil)
要么
self.dismiss(animated: false, completion: nil)
self.presentingViewController?.dismiss(animated: false, completion: nil)
但我无法返回MainViewController。我尝试创建对GameViewController的引用以将其弹出:
weak var gameViewController:GameViewController? = GameViewController()
不幸的是,我找不到合适的功能来正确关闭它。
经过大量搜索却找不到答案,我想我会尝试其他方法。
2号
GameViewController(持有SKView)然后让GVC持有我想要的按钮和标签,并在顶部显示场景。这是失败的,因为按钮和标签没有zPositions并显示在场景的顶部。
我在调用场景之前尝试对它们执行
.isHidden = true
,这似乎可行,但是当我关闭场景并尝试将它们更改回.isHidden = false
(使用协议尝试)时,我无法使其正常工作。 (从stvn描述的How to reference the current view controller from a sprite kit scene开始)我怀疑这第二种方法可能是个不错的方法,但也许我只是没有正确地使用它。
数0.5
最后,我现在正在考虑的只是使第二个场景在它们之间来回“翻转”。我相信这是推荐的方法,但我不确定如何实现。如果我做了这个版本。我想每个视图都有一个gameScene.swift / gameScene.sks(也许使用presenting a uiviewcontroller for skscene之类的东西。
我希望第一种方法是拥有两个视图控制器,因为我认为使用几个视图控制器可以更轻松地完成游戏的布局。
我最不喜欢的方法是使用多个场景,因为我对Sprite Kit和数学工具的布局不太满意。
第一种方法甚至可能吗?如果是这样,任何建议都将是很棒的。如果不是,推荐的方法是什么?
最佳答案
在方法1中,如果MainViewController是UINavigationController,则在推入和弹出所需的其他ViewController时应该没有问题。
例如在GameViewController中:
self.navigationController!.popViewController(animated: true)
关于ios - 在Swift中使用多个ViewController和SKScene,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46702006/