当前位置: 首页 > 面试题库 >

在SKScene中将Segue绑定到UIViewController

梁丘俊材
2023-03-14
问题内容

在我的GameScene.swift文件中,我试图像下面这样对我的菜单视图控制器执行一次segue:

func returnToMainMenu(){
    var vc: UIViewController = UIViewController()
    vc = self.view!.window!.rootViewController!
    vc.performSegueWithIdentifier("menu", sender: vc)
}

点击节点时运行此方法:

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
    for touch: AnyObject in touches {
        let location = touch.locationInNode(self)
        if gameOn == false{
            if restartBack.containsPoint(location){
                self.restartGame()
            }
            else if menuBack.containsPoint(location){
                self.returnToMainMenu()
            }
            else if justBegin == true{
                self.restartGame()
            }
        }
    }
}

menuBack返回菜单的按钮在哪里。每次运行此代码时,都会引发NSException:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<ProxyBlock.Menu: 0x165a3e90>) has no segue with identifier 'menu''

我检查了segue的标识符,它的确是“菜单”。


问题答案:

您正在根viewController上调用segue。我认为这就是问题所在。您需要改为在场景的viewController上调用segue(我假设您已经创建了segue,因此在根viewController上找不到它)。

现在的问题是,SKScene不能直接访问它的viewController,而只能直接访问它所在的视图。您需要手动创建一个指向它的指针。这可以通过为SKScene创建一个属性来完成:

class GameScene: SKScene {
    weak var viewController: UIViewController?
    ...
}

然后,在viewController类中 skView.presentScene(scene)

scene.viewController = self

现在,您可以直接访问viewController。只需在此viewController上调用segue:

func returnToMainMenu(){
    viewController?.performSegueWithIdentifier("menu", sender: vc)
}


 类似资料:
  • 有没有一种方法可以直接将memcached绑定到它下面的本地存储?将用一个例子来解释。假设hbase被用作分布式的后端。memcached的一层被用作缓存层,它可以被认为是hbase的一个完全副本(在某种意义上)。假设系统中有4个节点,其中3个用于hbase并在其顶部有一个memcached层,1个节点用于计算。通常的规范是查找memcached是否有某个键。如果有,取出来并用于计算。如果没有,则

  • 问题内容: 我有一个视图控制器,其中有三个skscenes作为子级。 当我从一个过渡到另一个时,旧的场景不会被释放。 我希望将其释放,就好像它从未出现过一样。 例: 当我第一次加载该应用程序时,只有1个场景可见(例如,它占用了100mb的内存),然后我过渡到另一个(100mb以上),然后是第三个(300mb内存)。 我最终将拥有300mb的内存,而我一直都希望拥有100mb。 我该如何实现? 问题

  • 问题内容: 是否可以在内实施应用内购买?如果是这样,怎么办?我正在尝试将“购买”按钮用作运气不好的按钮。我不确定代码是否需要放入或视图控制器中。我看过大量的教程,但它们似乎都针对单视图应用程序,而不是SpriteKit。 问题答案: 首先,将其放入游戏场景行中,并确保已导入框架“ StoreKit” 接下来,您想将这些行放到didmovetoview中。请记住,在“对象:”之后,您输入的字符串应该

  • 问题内容: 互联网上有一些重叠式教程,有时会全部使用 。 这在我的项目中某种程度上是不可能的,因为(我猜)我的视图在任何时候都没有使用(的一部分)构造函数。 在ViewController的viewDidLoad中,基本上仅创建MainScene: …在这里(注意:SCNScene而不是SCNView): 场景已完美创建,我现在想覆盖一个SKScene。有人知道吗? 问题答案: SpriteKit

  • 问题内容: 在上面的代码中,我有2个问题:1)。它具有编译错误:’UINavigationController!’ 没有名为“ pushViewController”的成员 但是在该类中,确实有一个pushViewController方法。 2)。我必须添加注释:@objc(SEPushNoAnimationSegue),否则,在情节提要中,它只能识别随机生成的名称,例如_tcxxxxSEPush

  • 如何将MVVM值绑定到dropdownlist?下面的输入元素运行良好