2010-02-22 63 views
1

我试图嵌入符号的x个与此:从swf动态嵌入符号?

[Embed(source='graphics/backgrounds.swf', symbol='background01')] 
private var Background01 : Class; 

的问题是,我有一个像100个的背景符号,并想将它们嵌入,而无需编写每一个像下面这里的代码:

[Embed(source='graphics/backgrounds.swf', symbol='background01')] 
private var Background01 : Class; 

[Embed(source='graphics/backgrounds.swf', symbol='background02')] 
private var Background02 : Class; 

[Embed(source='graphics/backgrounds.swf', symbol='background03')] 
private var Background03 : Class; 

,而不是我想用2个循环是这样的:

for (var i = 0;i < 10;i++) 
{ 
    for (var j = 0;j < 10;j++) 
    { 
     [Embed(source='graphics/backgrounds.swf', symbol='background' + i + j)] 
     // code for adding this to an 2d-array or something 
    } 
} 

这不会工作,因为它告诉我,该元数据是正确■ o我的问题是:

可以做到这一点吗?还是有类似的方式来做到这一点?

回答

3

是的,很遗憾地说马库斯,没有办法做你想做的事情。 MetaData不是AS3,它不被评估,所以你不能以你尝试的方式使用它。

但是,如果您要嵌入100个背景符号,为什么不在时间线中的每个帧上创建单个MovieClip?然后嵌入该符号一次,并使用gotoAndStop去你想要的那个?

100个背景全部加载到内存中的开始听起来像是一般的方式去我的一般。更好的做法可能是在你需要的时候加载和删除内存。这当然取决于他们的用途,但名称“背景”暗示了这可能是一个更好的行动方案。

+0

我如何加载它们进出内存然后:p?是否有可能从swf做到这一点? – Marcus 2010-02-23 09:30:19

+1

您需要将每个背景放在单个swf中,可能名为background0.swf .. backgroundN.swf。然后你可以使用Loader加载swfs。将Loader放在舞台上,然后loader.load(新的URLRequest(“backround”+ i +“.swf”));.当你想交换背景时,在它后面添加另一个加载器,使用loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onBackgroundSwap)监听Event.COMPLETE事件,然后在onBackgroundSwap中删除先前的背景。希望这可以帮助。如果你需要更多,我可以在下面添加另一个答案,以更充分地向你展示它:) – alecmce 2010-02-23 18:01:44

+0

在一个Movieclip thingy中处理了100个背景,我的背景是可怜的矢量图,所以它没有占用那么多的内存:) – Marcus 2010-02-24 16:49:34

1

我不相信你可以把meta指令放在常规的代码语句中。它们是您正在编写的类的范围内变量声明的一部分。

如果编写如此多的变量证明繁重,并且已经按照您的顺序命名了这些符号,请在您喜欢的文本编辑器(我使用并喜欢ActiveState的KomodoEdit,并且它是免费的)中编写一个JavaScript宏,并让它吐出您可以将文本粘贴到您的类ActionScript中。