gpt4 book ai didi

ios - SKSprite 场景的内存问题

转载 作者:行者123 更新时间:2023-11-28 08:48:32 26 4
gpt4 key购买 nike

当我尝试在两个场景之间切换时,内存增加了。没有重新分配。我尝试调用 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()

}

最终我收到了内存警告...然后应用程序崩溃了。

最佳答案

因此,在花费大量时间尝试调试导致内存问题的原因之后,它最终成为了 NSTimers。谢谢 KnightOfDragon 让我走上正确的道路。尽管我会尝试在加载新场景之前使每个计时器失效,但计时器从未卸载并在后台继续运行。 deinit 函数从未被调用,因此场景从未被卸载。我可以开始工作的唯一解决方案是根本不使用 NSTimers,而是在此处使用此自定义类:https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk1ch12p499timerLeaker2/ch12p325NotificationLeaker/CancelableTimer.swift

希望这对以后的人有所帮助。这让我轻松地花费了 40 个小时的工作时间。 :(

关于ios - SKSprite 场景的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34643062/

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