从视图中停止并删除SKScene

时间:2016-02-17 16:53:49

标签: swift macos cocoa sprite-kit

a已经为SKScene创建了子类,并实现了didMoveToView,目前没有做任何事情。空功能体。我们暂时将TestScene类命名为。 我还有一个WindowController和一个名为testScene的var:

var testScene: TestScene?

功能已实施showhide

show函数如下所示:

func show(){
     testScene = TestScene(fileNamed:"TestScene")
}

fileNamed:“TestScene”当然是带有动画的.sks文件。 隐藏功能如下所示:

func hide(){
    if let scene = testScene {
        scene.paused = true
    }
    testScene?.removeFromParent()
    testScene = nil
    self.close()
}

这个SpriteKit场景确实出现在我的应用程序中的情况下(按钮点击)。并且在执行消失之后。 到目前为止一切正常。

如果我按下按钮,动画进入视图并在触发hide()后关闭,但是:由于按下按钮

testScene = TestScene(fileNamed:"TestScene")

执行,我的CPU负载为0.5%。即使在hide之后。我可以推荐TestScene(),并在一点点峰值后CPU下降到0%。 (我在那个buttonPressed:function中做了更多的东西)。所以我很确定在调用hide之后不会删除TestScene,并且可能在后台执行一些疯狂的狗屎。 问题是,整个FinalScene将产生5%的CPU,并且在第一次出现之后这个负载不会消失。 :(

我的问题是:如何从执行循环中删除SKScene?

非常感谢任何建议,我从现在开始调试这个,并且无法弄清楚如何解雇已结束的动画。

PS。

1 个答案:

答案 0 :(得分:0)

解决方案是探索删除SKView-subview:

animationView.removeFromSuperview()

这意味着我们必须在每个事件上从xib构建视图,因为视图丢失了。另一种可能性是在show()上以编程方式添加SKView。