为什么我的 ViewController 重新打开后不显示另一个 SKScene?

2024-04-14

所以现在我正在编写一个游戏,但遇到了一个我没有真正找到解决方案的问题。我会尽力为你描述它。

所以,为了能够更好地解释我的问题,我为你们创建了一个示意图:

现在问题是:我有两个视图控制器,一个称为MenuVc,另一个称为GameVC. In GameVC我有一个SKView这显示了一个特定的SKScene when didMoveToView被称为,被命名GameScene. GameScene has a didBeginContact方法,然后将移动到另一个SKScene the SKView有,称为GameOverScene,使用以下代码(图中的 Segue 1):

let reveal = SKTransition.crossFadeWithDuration(0.5)
let gameOverScene = GameOverScene(size: self.size, won: false)
self.view?.presentScene(gameOverScene, transition: reveal)

从这里,用户可以返回GameScene以重新开始游戏(图中的 Segue 2)。在GameScene,还有另一个按钮,可以让您返回到MenuVC via a NSNotificationCenter事件(图中的Segue 3)。其代码如下:

在 GameViewController.swift 中:

override func awakeFromNib() {
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "goToMenuViewController:", name: "GoToMenuViewController", object: nil)
}

@objc func goToMenuViewController(notification: NSNotification){

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("MenuVC")
    vc.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve

    self.presentViewController(vc, animated: true, completion: nil)

    }
deinit{
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

在 GameScene.swift 中,当按下 backButton 时:

NSNotificationCenter.defaultCenter().postNotificationName("GoToMenuViewController", object: self)

所以如果我现在想回到GameVC使用按钮MenuVC(图中的 Segue 4),一切正常。这SKView in GameVC显示了GameScene再次,但是当didBeginContact()现在被调用,它不存在GameOverScene。我检查了该函数被调用,并且它也执行了其中的代码,但它没有执行应有的 segue (1) 。您知道我必须改变的原因和内容吗?调用 Segue 3 时是否与 deiniting 有关?

代码为GameVC's viewDidLoad:

let scene = GameScene(size: view.bounds.size)
        let skView = view as! SKView
        skView.ignoresSiblingOrder = true
        scene.scaleMode = .ResizeFill
        skView.presentScene(scene)

Segue 4 的代码:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("GameVC")
        vc.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve
        self.presentViewController(vc, animated: true, completion: nil)

确保在尝试呈现其他视图控制器之前关闭每个视图控制器。

如果你尝试在另一个已经呈现的视图控制器之上呈现一个视图控制器,我认为 UIKit 并不真正喜欢它。

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

为什么我的 ViewController 重新打开后不显示另一个 SKScene? 的相关文章

随机推荐

  • 排列函数:lubridate 和 dplyr R 之间的冲突

    我想用该函数重新排列 dfarrange from dplyr 问题是 当我有另一列 比方说 v2 与我想要排列 df 的列不同时 这两个包似乎存在冲突 library dplyr library lubridate start dates
  • 如何找到数组列表的长度? [复制]

    这个问题在这里已经有答案了 我不知道如何找到数组列表的长度 我想你可能需要使用blank length 但我不确定 我做了一个数组列表 ArrayList
  • Git推送:对象为12311134字节,大于此存储库中对象的1048576字节限制

    当尝试将本地环境中所做的一些提交推送到 Azure DevOps Repos origin 时 出现错误 该对象为 12311134 字节 大于此存储库中对象的 1048576 字节限制 我正在通过运行命令 git push origin
  • 如何在桶聚合中进行过滤器聚合?

    我有以下要求 我有一些如下所示的记录 作为示例 agreementid 1 lastdispositioncode PTP feedbackdate 30 11 2020 agreementid 1 lastdispositioncode
  • 找不到任何 X11 字体错误

    我开始进入 R 开发 并且正在遵循一个教程 该教程在某个时刻打开 X11 来显示图形 但是当该窗口打开时 我收到以下错误 轴错误 侧面 侧面 at at 标签 标签 可以 找不到任何 X11 字体 检查字体路径是否正确 在 另外 警告信息
  • WebDriverException:消息:通过 Selenium Chromedriver python 设置 UserAgent 时,“chromedriver”可执行文件需要位于 PATH 中

    我是网络抓取的新手 我正在尝试使用以下行修改我的用户代理 from selenium import webdriver chrome path r C Users Desktop chromedriver win32 chromedrive
  • ECMAScript5 对象和数组的深拷贝

    我希望找到一个示例代码来对 ECMAScript5 中的对象进行深度复制 复制应该可以克隆 嵌套对象 嵌套数组 数组中的嵌套对象 单独克隆每个数组项 注意 jQuery extend 似乎不处理情况 3 另外 我希望用干净的 ECMAScr
  • 将击键从 C# 应用程序发送到 Java 应用程序 - 奇怪的行为?

    我正在尝试将击键从 C 程序发送到 Java 应用程序 发送密钥的代码是 private void SendKeysToWindow string WindowName string KeysToSend IntPtr hWnd FindW
  • 使用 z-index 将 div 置于另一个 div 上方

    我想要div1高于div2 我尝试与z index但它不起作用 我试过这段代码 div width 100px height 100px div1 background red z index 1 div2 background blue
  • 以编程方式将文件上传到 Google 文档

    我的电子书文件夹中有很多大约 50GB 的 pdf 文件 现在我想将它们上传到 Google 文档中 例如 Linux 的 Rsync 是否可以使用 php 或 python 脚本将电子书文件夹和子文件夹中的所有 pdf 文件上传到 Goo
  • 更改<选择多个>中所选选项的颜色[重复]

    这个问题在这里已经有答案了 我遇到这个问题 我需要在单击 选择时更改一个 多个选项元素的颜色 单击时默认颜色为蓝色 我相信我们现在应该有一个解决方案 因为我尝试搜索解决方案但无济于事 希望在 CSS 或 vanilla JS 中做到这一点
  • 在 Office 加载项清单中指定 ~remoteAppUrl 的值

    我正在使用 Outlook 编写一个加载项新框架 http dev office com docs add ins overview office add ins 项目模板中的清单使用 remoteAppUrl来表示网页文件的位置 它在开发
  • 在ggplot2中手动指定刻度标签

    在 ggplot2 中 我有一个图表 其 y 轴位于 log10 x 1 上 我还没有找到直接指定 ggplot2 使用 log10 x 1 刻度的方法 所以我想直接修改 y 轴刻度标签 而不是 0 0 5 1 1 5 和 2 这些刻度将显
  • DRF:如何在保存到数据库之前更改模型字段的值

    如果我需要在保存到数据库之前更改一些字段值 因为我认为模型方法clear 适合 但尽管我竭尽全力 还是无法给他打电话 例如字段email我需要设置为小写和领域nda我需要设置为null 模型 py class Vendors models
  • jQuery colorbox:如何更改颜色框的位置

    默认情况下 颜色框在屏幕上垂直和水平居中显示 有没有办法改变它 例如从顶部垂直调整为 10 水平居中 这将覆盖顶部位置 您可以对 left 等执行相同的操作 colorbox top 100px important 从顶部开始 10 会更棘
  • Windows Azure 网站 python

    经过大量的艰苦工作 我最终得到了一个在 Windows Azure 上运行的 hello world Flask 应用程序 该应用程序是本地构建的并且运行良好 但将其部署到 Azure 是一场噩梦 所以我这里有两个问题 我似乎根本无法获得堆
  • SQL Server 中的行偏移

    SQL Server 有什么方法可以获取从给定偏移量开始的结果吗 例如 在另一种类型的 SQL 数据库中 可以执行以下操作 SELECT FROM MyTable OFFSET 50 LIMIT 25 得到结果51 75 SQL Serve
  • IVY 部分的循环依赖

    在一个项目中 我想将我的库切换到ivy部分编译模式 角度12 但现在遇到了一些令人讨厌的循环依赖错误 Error 从例子 Compiling with Angular sources in Ivy partial compilation m
  • 为什么字符串不等于存储的内容?

    这是一个简单而奇怪的问题 if tableViewNum One if drinkArray objectAtIndex 0 currentDate updatedArray addObject drinkArray NSLog MADE
  • 为什么我的 ViewController 重新打开后不显示另一个 SKScene?

    所以现在我正在编写一个游戏 但遇到了一个我没有真正找到解决方案的问题 我会尽力为你描述它 所以 为了能够更好地解释我的问题 我为你们创建了一个示意图 现在问题是 我有两个视图控制器 一个称为MenuVc 另一个称为GameVC In Gam