我想在编译时嵌入一些图像,所以我最终只能使用一个swf。 它们需要在数组内部,因为我需要以编程方式修改它们,它们可以是100个图像。不能使用flex,因为我想将整个函数保存在actionscript中(也就是make文件更小)
我在flex中找到了如何做到这一点:
...
<mx:Array id="test">
<mx:Image id="image0" source="@Embed(source='../../../lib/Images033,jpg')" />
<mx:Image id="image1" source="@Embed(source='../../../lib/Images034,jpg')" />
<mx:Image id="image2" source="@Embed(source='../../../lib/Images035,jpg')" />
<mx:Image id="image3" source="@Embed(source='../../../lib/Images036,jpg')" />
</mx:Array>
...
addChild(test[1] as something);
...
所以有人知道如何执行上述操作但只是在Actionscript中吗?
非常感谢。
答案 0 :(得分:3)
我认为有必要做一些澄清来回答你的问题。
首先,您发布的代码是MXML(不是Flex)。 MXML只是编写ActionScript而不必了解ActionScript的一种方式。如果您在ActionScript中编写代码,它还会删除您需要完成的大量工作。当Flex创建SWF时,它会查看MXML并在后台创建ActionScript。
其次,我们大多数人称之为“Flex”的部分分为两部分。有FlexBuilder,它是您编写Flex应用程序的应用程序,还有Flex。与基本的ActionScript语言相比,Flex主要是一组额外的ActionScript库,它们为我们提供了许多附加功能。
我认为你正在调用MXML'Flex'。至于它的价值,据我所知,使用MXML不会增加文件大小,因为MXML在创建SWF之前转换为ActionScript。
因此,对您的问题的最佳答案可能是继续使用MXML。
如果不是,
通过将Embed元数据标记与Class对象结合使用,可以在ActionScript中嵌入图像和其他资源。
您可以在Adobe的“高级Flex编程”文档的这一部分中看到如何执行此操作的一个很好的示例。
http://livedocs.adobe.com/flex/3/html/help.html?content=embed_4.html
但是,对于数百张图片来说,这样做真的很麻烦。甚至比在MXML中做的更多。我强烈建议在运行时以编程方式加载它们。这将是代码少得多,并且用户的下载时间要小得多等。
希望这有帮助。
答案 1 :(得分:3)
嗯,不管怎样,你需要为你想要嵌入的每个的东西添加一个Embed语句,所以你真的无法解决这个问题。但是如果您更喜欢在脚本中处理所有内容,那么您可以执行类似的操作(它是AIR应用程序,但WindowedApplication标记之间的所有内容都应该在普通的'Flex应用程序中):
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" initialize="onInitialize()">
<mx:Script>
<![CDATA[
import mx.controls.Image;
private var images:Array;
private const IMAGE_COUNT:uint = 5;
[Embed(source='Image0.png')]
private var Image0:Class;
[Embed(source='Image1.png')]
private var Image1:Class;
[Embed(source='Image2.png')]
private var Image2:Class;
[Embed(source='Image3.png')]
private var Image3:Class;
[Embed(source='Image4.png')]
private var Image4:Class;
private function onInitialize():void
{
images = new Array(IMAGE_COUNT);
// Populate your array with Class references to embedded imagery
for (var i:int = 0; i < IMAGE_COUNT; i++)
{
images[i] = this["Image" + i];
}
}
override protected function createChildren():void
{
super.createChildren();
// Add your children to the display list
for (var i:int = 0; i < IMAGE_COUNT; i++)
{
var img:Image = new Image();
img.source = images[i];
addChild(img);
}
}
]]>
</mx:Script>
</mx:WindowedApplication>
基本上你正在做的事情,确保你的图像都是在编译时嵌入并根据一些数字方案命名(在这种情况下,只是附加一个索引),用数组引用填充你的数组,然后在组件生命周期的createChildren()阶段实例化并将它们添加到显示列表中。
这里有一些深奥的东西,所以如果你不太了解一切,请随时回复评论,我会留意事情。但是这是经过测试的代码,并且应该对你来说非常好,因为到目前为止你已经解释了你的要求。