【发布时间】:2016-01-06 21:24:53
【问题描述】:
当我尝试在两个场景之间转换时,内存会增加。没有解除分配。我尝试调用 skView.removeFromSuperview() 但屏幕变黑。这是我的代码:
func goGame()
{
//crowdImage.hidden = true
imageView.removeFromSuperview()
scene?.removeAllActions()
scene?.removeAllChildren()
scene?.removeFromParent()
//view.removeFromSuperview()
if myviewbool == 0
{
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
skView = self.view as! SKView
skView.frameInterval = 2
skView.ignoresSiblingOrder = false
scene.viewController = self
scene.scaleMode = .AspectFill
skView.presentScene(scene, transition: SKTransition.crossFadeWithDuration(1))
}
skView2.scene?.removeFromParent()
//skView2.removeFromSuperview() // CAUSES BLACK SCREEN
}
if myviewbool == 1
{
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
skView2 = self.view as! SKView
skView2.frameInterval = 2
skView2.ignoresSiblingOrder = false
scene.viewController = self
scene.scaleMode = .AspectFill
skView2.presentScene(scene, transition: SKTransition.crossFadeWithDuration(1))
}
skView.scene?.removeFromParent()
//skView.removeFromSuperview() // CAUSES BLACK SCREEN
}
}
当游戏结束时,我调用 func gameEnd() 来切换 myviewbool 变量并调用 goGame()。任何帮助深表感谢! ;-)
func gameEnded()
{
if myviewbool == 0
{
myviewbool = 1
}
else
{
myviewbool = 0
}
isGamePlaying = false
goGame()
}
最终我收到内存警告...然后应用程序崩溃。
【问题讨论】:
-
顺便说一句:我正在切换两个视图,因为我认为这可以解决我的记忆问题。但与使用 1 个视图的结果相同。 :(
-
我们需要更多信息在这里,你现在能做的最好的事情是在你的游戏场景类中覆盖 deinit,并放入一个 print("Scene Deinit") 这会告诉你场景是否被移除。如果不是,您可能有一些东西来保存它,例如块、计时器或通知处理程序
-
感谢奈特!会试试的!
标签: ios swift memory-management sprite-kit skspritenode