這聽起來像是時候將您的資產分解爲單獨的文件並在運行時從磁盤加載它們。當你編輯代碼的時候,這應該釋放一些空間,這樣FB4就不會被嚇倒。我剛剛完成了一個擁有大量資產的Facebook遊戲,並且我最終將所有聲音都放在了自己的SWF中,所有沉重的圖形都放在了自己的SWF中,然後在運行時加載它們。下面是關鍵點的細分:
對我來說,我使用Flash CS5生成資產,並在第一幀中導出actionscript的符號。我只是出口這部電影,Flash會把我的資產轉交給SWF,而且我很樂意去。或者,你可以使用簡單的AS文件和大量的嵌入標籤,並使用ant或FB4將其編譯爲自己的SWF文件。只要您將自己的資產轉換爲SWF文件,在一天結束時就會發生同樣的事情。
這種方式,而不是一個完整的生活與你的遊戲邏輯的其餘部分嵌入標籤的文件,你有一個完整的符號名的文件,這樣就可以讓他們當你需要他們:
//GraphicalAssets.as
//the linkage for this asset in your asset swf would need to match 'hero_guy_graphic'
public static var HERO_GUY_GRAPHIC:String = "hero_guy_graphic";
而且地方也守住資產的文件名:
//AssetFiles.as
public static var CHARACTER_ASSETS:String = "thePathToTheCharacterAssetsFile.swf";
我繼續之前,這將是把我即將描述成某種AssetManager類的功能是一個好主意。每次遊戲需要資產時,您都不想加載文件,因此AssetManager類可以讓您找到資產,直到您確定完成了它們。 (你可能已經知道了)
無論如何,當你決定你需要在遊戲中這些資產,您使用裝載機的一個實例裝載它們(據推測,在某處AssetManager類):
var loader:Loader = new Loader();
var loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleAssetsLoaded);
//add some error event listeners here too...
var request:URLRequest = new URLRequest(pathToMyAssetsFile);
loader.load(request);
在handleAssetsLoaded
功能,你掛在加載的SWF的applicationDomain
對象。 applicationDomain是您訪問SWF中所有符號定義的接入點。
private function handleAssetsLoaded(evt:Event):void {
//hang on to this for later
var appDomain:ApplicationDomain = (evt.target as LoaderInfo).applicationDomain;
//a good way to do that would be have a private array where you hang on to them
//_appDomains["TheNameOfMyAssetFile.swf"] = appDomain;
}
然後,當你想獲得一個特定的資產,你會使用某種getAsset()方法:
public function getAsset(assetName:String, fileName:String):* {
var assetFileAppDomain:ApplicationDomain = _appDomains[fileName] as ApplicationDomain;
var assetClassDefinition:Class = assetFileAppDomain.getDefinition(assetName) as Class;
return new assetClassDefinition();
}
最後,當你想在遊戲中獲得HeroGuy,你有一些電話,看起來像這樣:
//assuming AssetManager is a singleton that we can get with AssetManager.instance ...
var heroGuyGraphic:MovieClip = AssetManager.instance.getAsset(GraphicalAssets.HERO_GUY_GRAPHIC, AssetFiles.CHARACTER_ASSETS) as MovieClip;
希望這足以讓你在正確的軌道上。很多時候,我在運行時加載的資源文件是在網上,但我不明白爲什麼它不應該工作,以同樣的方法適用於從磁盤獲取資產的時間。讓我知道,如果你有任何問題 - 我很抱歉,如果我不是非常清楚,我想你知道,足以填補空白:)
祝你好運吧!
您好伊恩,我要感謝你的建議。這是唯一的解決方案,讓我度過了可怕的OOM錯誤。非常感激!! – Jason 2011-07-21 18:36:04
沒有問題:)如果你喜歡這個答案,那麼點擊複選標記接受它。謝啦! – Ian 2011-07-25 14:25:18
對不起,花了我一年的時間終於給你勾選了!完全忘了這個!我還寫了一個快速的職位,遮住了我的行動路線,根據您的反饋...也許這將幫助別人:[鏈接](http://jasoneleon.blogspot.com/2011/07/out-of-memory-錯誤的閃光建設者,4.html) – Jason 2012-05-19 18:32:18