这听起来像是时候将您的资产分解为单独的文件并在运行时从磁盘加载它们。当你编辑代码的时候,这应该释放一些空间,这样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