除去動畫紋理我初始化在我的視圖控制器約30動畫紋理上游戲負載這樣的:雪碧試劑盒,從存儲器
for i=0; i<atlasName.count; i++ {
frameNumber = animationTextures.animationTextureAtlas[i].textureNames.count
firstFrameName = "\(atlasName[i])1"
animationTextures.animationFrames.append([animationTextures.animationTextureAtlas[i].textureNamed(firstFrameName)])
for j=2; j<=frameNumber; j++ {
var frameName = "\(atlasName[i])\(j)"
animationTextures.animationFrames[i].append(animationTextures.animationTextureAtlas[i].textureNamed(frameName))
}
animationTextures.firstFrame.append(animationTextures.animationFrames[i][0])
}
基本上我把所有的動畫到一個數組所以可以很容易地訪問它們。
在遊戲過程中,每個動畫都會出現一小段時間,當我不需要它們時,我使用.removeFromParent()將其刪除,但問題在於它仍然保留在因此一旦遊戲中出現約15-20個動畫並進入內存,它將達到約450-500MB,並在iPhone 4和iPhone 4上崩潰。
有誰知道我怎麼能真的從內存中刪除該動畫,以便它不佔用空間,一旦不再需要它了?
我可以告訴你一個事實,即SpriteKit有一個內置的自動內存管理系統,適用於像這樣的情況。如果紋理數據佔用太多空間,它將自動釋放。我不認爲它的紋理本身是必需的(除非你有ALOT),而崩潰可能與你對這些紋理做什麼有關。 – MaxKargin 2015-04-02 22:35:55
這裏有一些有用的職位關於此:http://stackoverflow.com/a/21541819/3402095,http://stackoverflow.com/questions/5887248/ios-app-maximum-memory-budget – Whirlwind 2015-04-03 00:05:16
它幾乎聽起來像它是事物的組合。首先,也許你並沒有重複使用紋理,即使你將它們放入數組中。其次,即使您調用removeFromParent(),您仍然可以參考精靈。你也可能想看看你創建的數組。當你有名爲frameNumber的變量時,當它們實際上是計數等時很難遵循。您的陣列可能比預期的大得多。希望有幫助。 – 2015-04-03 04:19:09