我正在尝试使用 Swift、SpriteKit 和 SKTileMaps 创建一个简单的 2d 平台游戏。但是每次我在包含 SKTileMaps 的场景之间切换时,我都会在 Xcode Instruments 中看到很多内存泄漏。
我已经尽可能简单地重现了这个问题。我正在使用 .sks 文件来创建场景,并且该文件仅包含 1 个填充了一些图块的 tileMap。
视图控制器中用于呈现场景的代码:
if let view = self.view as! SKView? {
let scene = LoadingScene(size: CGSize(width: 2048, height: 1536))
scene.scaleMode = .aspectFill
view.presentScene(scene)
场景代码:
import SpriteKit
import GameplayKit
class GameScene: SKScene {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let scene = GameScene(fileNamed: "WorldScene") else{fatalError("Could not open world scene")}
view?.presentScene(scene)
}
}
我选择 GameScene 作为 .sks 场景文件中的自定义类。
每次我改变场景时,这都会导致很多小的内存泄漏:
这是只有一个场景变化的泄漏。我做错了什么还是这是一个 SpriteKit 错误?
编辑1
SKCTileMapNode::_ensureChunkForTileIndex(unsigned int) 泄漏发生在我每次加载瓦片地图时,而其余的仅在更改场景时出现
编辑2
更改 GameViewController 以跳过 LoadingScene 并直接进入 GameScene。内存泄漏仍然存在:
if let view = self.view as! SKView? {
guard let scene = GameScene(fileNamed: "WorldScene") else{fatalError("Could not open world scene")}
scene.scaleMode = .aspectFill
view.presentScene(scene)
}