在 GameScene 和 ViewController Swift 之间移动

Posted

技术标签:

【中文标题】在 GameScene 和 ViewController Swift 之间移动【英文标题】:Moving between GameScene and ViewController Swift 【发布时间】:2015-04-20 19:48:44 【问题描述】:

我想在触摸图像时从我的 GameScene 移动到 ViewController,并在触摸 UIButton 时返回到 GameScene。 它可以从 ViewController 到 GameScene,因为它是 UIButton。

我是这样做的:

@IBAction func playbut(sender: UIButton) 
    var scene = GameScene(size: CGSize())
    let skView = self.view as! SKView!
    skView.ignoresSiblingOrder = true
    scene.scaleMode = .ResizeFill
    scene.size = skView.bounds.size
    skView.presentScene(scene)

但是当我触摸 GameScene 上的图像时,我不知道要编写什么代码返回 ViewController。

我应该给 GameScene 写什么?

谢谢

【问题讨论】:

【参考方案1】:

我不认为这是你应该做的......你应该使用 SKScene - 而不是 UIViewController - 作为你的导航/菜单。

但是,one post 我发现确实解释了这一点(尽管它在 Obj-C 中):

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone"     bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"PurchasedVC"];
//Call on the RootViewController to present the New View Controller
[self.view.window.rootViewController presentViewController:vc animated:YES completion:nil];

Swift 版本应该是这样的(我不是专家,但语法还不错)...

var mainStoryboard = UIStoryboard(name: "Main_iPhone", bundle: nil)
var vc = mainStoryboard.instantiateViewControllerWithIdentifier("PurchasedVC") as! UIViewController
self.view.window?.rootViewController?.presentViewController(vc, animated: true, completion: nil)

就其他答案而言:

这可能是我在这个主题上看到的最好的帖子:Presenting UIViewController from SKScene 另外,我在场景之间的过渡中找到了这个:SpriteKit how to create and transition to different scenes (Swift language)

我希望这会有所帮助。我也有同样的问题,老实说,看起来我一直都做错了!

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。 UIStoryboard 的名称是什么?我的故事板的名字是 Main.Storyboard。但是,如果我将 ''Main_iPhone'' 替换为 ''Main.Storyboard'' 它会给我一个错误,即找不到 Main.Storyboard。我应该在那里写什么?【参考方案2】:

请使用以下内容。

let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) let vc = mainStoryboard.instantiateViewController(withIdentifier: "MainController") let vc2 = self?.view!.window?.rootViewController?.presentedViewController vc2?.present(vc, animated: true, completion: nil)

使用常量

self?.view!.window?.rootViewController?.presentedViewController

我们可以派生当前游戏场景在其中运行的视图控制器。

【讨论】:

以上是关于在 GameScene 和 ViewController Swift 之间移动的主要内容,如果未能解决你的问题,请参考以下文章

Sprite Kit 场景编辑器 GameScene.sks 场景宽度和高度

从 GameViewController 访问按钮、标签和 uiimageviews 到 GameScene

Swift:使用 StoryBoards 和 UIViewControllers 在 GameScene 中满足条件后返回主菜单?

SKSpriteNode 在 GameScene 中消失

返回 GameScene 时内存增加

如何在 GameScene 中从 ViewController 调用方法