2017-05-05 36 views
0

我正在开发一个小游戏,起初它的作品超级完美。它非常好地加载sks文件和声音文件。但经过几分钟的测试后,我开始出现“加载声音资源错误”,粒子效应全部消失。突然无法读取文件

我认为这可能是内存问题,但是,游戏只需要大约120M,我还没有收到任何内存警告。

那么它如何管理在一开始就读取文件,几分钟后又不能这样做呢? SpriteKit中有些棘手的问题我不知道?比如成功加载一百个文件后,游戏无法再读取任何文件,直到用户晃动两次iPhone并将其颠倒......如果这是真的,我可以通知游戏玩家在游戏教程中这样做。

那么谁能帮我处理这个......?很多感谢的......

// The way I load background music: 

let musicPath=Bundle.main.path(forResource: "Main", ofType: "mp3") 
let url = URL(fileURLWithPath: musicPath!) 
do{ 
    try main=AVAudioPlayer(contentsOf: url)  
}catch{  
    return 
} 

// The way I load sound files: 

let a = SKAction.playSoundFileNamed("Fire",waitForCompletion:false) 
audioNode.run(a) 


// The way I load SKS files: 

let emitterPath = Bundle.main.path(forResource: "Fire", ofType: "sks")! 
let emitter = NSKeyedUnarchiver.unarchiveObject(withFile: emitterPath) as! SKEmitterNode 
self.addChild(emitter) 

回答

0

很难说没有看到你的代码,但如果你打开了很多文件,读者可以运行的内存或使文件无法访问,直到其他节点从读文件不见了。

你碰巧知道你是否每次渲染都创建新的音频节点?

苹果文档建议您创建一个可重复使用的SKAction。所以如果你需要重用你的Fire动作,我会创建它的单例并反复运行这个单个对象,而不是一次又一次地分配新的SKAction。

Source

+0

好的,我编辑了问题,并提供了我的代码上面。如何关闭文件..? –

+0

对不起,我一定误解了你是如何加载精灵的。更新我的回答 – Ganksy

+0

谢谢。我会尝试,但我仍然不确定如何解决粒子消失问题:) –