转换回 gamescene.swift 会导致错误“'尝试添加一个已经有父节点的 SKNode”
Posted
技术标签:
【中文标题】转换回 gamescene.swift 会导致错误“\'尝试添加一个已经有父节点的 SKNode”【英文标题】:Transitioning back to gamescene.swift causes error "'Attemped to add a SKNode which already has a parent"转换回 gamescene.swift 会导致错误“'尝试添加一个已经有父节点的 SKNode” 【发布时间】:2015-02-25 06:12:39 【问题描述】:我的应用包含两个场景。 Playscene.swift 和 gamescene.swift。
从游戏场景过渡到游戏场景(游戏发生的地方)效果很好。但是,一旦游戏结束,我就会出现一个“重播”按钮,允许用户返回到 gamescene.swift。在转换回来时,它会因错误“尝试添加已经有父节点的 SKNode”而崩溃。是否有正确的方法可以转换回主屏幕或重新启动游戏,这样我就不会收到错误消息?谢谢大家的帮助!!
if self.nodeAtPoint(touchLocation) == self.replay
let scene = GameScene(size: self.size)
let skView = self.view as SKView!
scene.size = skView.bounds.size
self.view?.presentScene(scene)
let transition = SKTransition.crossFadeWithDuration(1.0)
transition.pausesOutgoingScene = false
skView.presentScene(scene, transition: transition)
Gamescene.swift 错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attemped to add a SKNode which already has a parent: <SKLabelNode> name:'(null)' text:'Highscore:' fontName:'Avenir-Black' position:344, 549'
*** 首先抛出调用栈:
【问题讨论】:
完全偏离主题,但你的场景名称有点混乱。从名称来看,其中任何一个都可能是游戏发生的地方;) 哈哈是真的。这就是我的菜鸟(这是我的第一个应用) 【参考方案1】:我觉得自己很愚蠢。我添加了一个断点并且没有注意。可以肯定地说该睡觉了。
【讨论】:
【参考方案2】:你试图两次呈现相同的场景:
self.view?.presentScene(scene)
skView.presentScene(scene, transition: transition)
也许你不想这样做:
if self.nodeAtPoint(touchLocation) == self.replay
let skView = self.view as SKView!
let scene = GameScene(size: skView.bounds.size)
// Might also work with the following line instead :
// let scene = GameScene(size: self.frame.size)
let transition = SKTransition.crossFadeWithDuration(1.0)
transition.pausesOutgoingScene = false
self.view?.presentScene(scene, transition: transition)
【讨论】:
感谢您指出这一点,我不知道我是怎么错过的。但是,我仍然会崩溃。除了“class PlayScene: SKScene, SKPhysicsContactDelegate”行上的突出显示外,只显示没有错误。有没有正确的方法可以转换回我错过的游戏场景?【参考方案3】:您可能在 GameScene class
之外声明 SKLabelNode,使 SKLabelNode 成为全局变量,您应该在类中声明它,以便在 scene A
转换为 scene B
时它会消失。
【讨论】:
以上是关于转换回 gamescene.swift 会导致错误“'尝试添加一个已经有父节点的 SKNode”的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 8 SpriteKit:GameScene.swift 文件未被识别/运行
从 JavaScript 添加 asp.net 下拉列表项会导致页面回发错误