首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SceneKit在场景内存泄漏之间切换

SceneKit在场景内存泄漏之间切换
EN

Stack Overflow用户
提问于 2019-01-27 17:47:28
回答 1查看 317关注 0票数 0

我有两个空白的scnscene对象,没有任何节点和摄影机:

代码语言:javascript
复制
func setupScenes() {
   scnView = SCNView(frame: self.view.frame)
   self.view.addSubview(scnView)

   gameScene = SCNScene(named: "/MrPig.scnassets/GameScene.scn")
   splashScene = SCNScene(named: "/MrPig.scnassets/SplashScene.scn")
   scnView.scene = splashScene
}

显示每个scnscene的两种方法:

代码语言:javascript
复制
func startSplash() {
    gameScene.isPaused = true
    let transition = SKTransition.doorsOpenVertical(withDuration: 1.0)
    scnView.present(splashScene, with: transition, incomingPointOfView: nil, completionHandler: {
      self.gameState = .tapToPlay
      self.setupSounds()
      self.splashScene.isPaused = false
    })
  }

  func startGame() {
    splashScene.isPaused = true
    let transition = SKTransition.doorsOpenVertical(withDuration: 1.0)
    scnView.present(gameScene, with: transition, incomingPointOfView: nil, completionHandler: {
      self.gameState = .playing
      self.setupSounds()
      self.gameScene.isPaused = false
    })
  }

以及用于在scnscenes之间切换的触摸手势:

代码语言:javascript
复制
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        if gameState == .tapToPlay {
            startGame()
        } else {
            startSplash()
        }
    }

每次我触摸屏幕时,屏幕上都会出现第一个或第二个scnscene,我习惯了加上大约80Mb的RAM。触摸10次后,已使用500MB内存。

我不明白为什么会这样?

EN

回答 1

Stack Overflow用户

发布于 2019-02-21 00:11:40

我遇到了完全相同的问题,找不到原因,但我猜这与spritekit有关,特别是当你同时使用metal和scenekit时。参见scenekit spritekit memory leak。呈现(场景...)来自spritekit。我想出的唯一解决方案是直接设置SCNView的场景和指向视图,而不是通过present(...)方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54386840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档