2017-05-05 64 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

謝謝。我會嘗試,但我仍然不確定如何解決粒子消失問題:) –