gpt4 book ai didi

swift - 使用 SKSpriteNode 作为按钮从 GameScene 过渡到 UITabBarController

转载 作者:行者123 更新时间:2023-11-28 16:16:11 25 4
gpt4 key购买 nike

我有一个 UITabBarController,它有两个项目,第一个是日历,它只是一个 UIWebView。第二项引入一个SpriteKit游戏场景,隐藏标签栏(游戏需要全屏)。

我有一个 SKSpriteNode 图像,当点击它时,我希望 View 变回日历 View (第一个标签栏项目)。我已经搜索了一种方法来执行此操作,并尝试了我在 StackOverflow 上找到的各种建议,但没有任何效果。应用程序因错误而崩溃

"Unexpectedly found nil while unwrapping an optional"

我明白该错误的含义,只是不明白我为什么会收到它。这是相关代码(其中一部分是我在尝试解决这个问题时从这里获得的):

在 GameScene.swift 中:

weak var viewController: GameViewController!

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch:UITouch = touches.first! as UITouch
let positionInScene = touch.locationInNode(self)
let touchedNode = self.nodeAtPoint(positionInScene)

if let name = touchedNode.name {
if name == "exit" {
self.viewController.gameOver()
self.removeFromParent()
self.view?.presentScene(nil)
}
}
}

在 GameViewController.swift 中:

var currentGame: GameScene!

override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.tabBar.hidden = true
if let scene = GameScene(fileNamed:"GameScene") {
// Configure the view.
let skView = self.view as! SKView
skView.showsFPS = false
skView.showsNodeCount = false

skView.ignoresSiblingOrder = true

scene.scaleMode = .AspectFill

scene.viewController = self
skView.presentScene(scene)
currentGame = scene
}
}

func gameOver() {
performSegueWithIdentifier("backToMain", sender: nil)
}

这是给出错误的行:

self.viewController.gameOver()

最佳答案

你的代码是正确的;我认为可能的问题是您在不传输 viewController 的值的情况下呈现多个场景。要追踪此问题,请使用查找导航器 (Cmd+3) 搜索 presentScene,然后确保每次调用都是您已传输 viewController 的值之后 属性跨越到新场景。

关于swift - 使用 SKSpriteNode 作为按钮从 GameScene 过渡到 UITabBarController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39057230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com