下面,我有两种半种不同的方式使用视图控制器和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/

10-11 00:18