Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Actionscript嵌入数组_Apache Flex_Actionscript - Fatal编程技术网

Apache flex Actionscript嵌入数组

Apache flex Actionscript嵌入数组,apache-flex,actionscript,Apache Flex,Actionscript,我想在编译时嵌入一些图像,这样我就只需要一个swf。 它们需要在一个数组中,因为我需要通过编程修改它们,它们可以是100个图像。不能使用flex,因为我想在actionscript中保留整个函数(也称为使文件变小) 我发现如何在flex中实现这一点: ... <mx:Array id="test"> <mx:Image id="image0" source="@Embed(source='../../../lib/Images033,jpg')" /> <

我想在编译时嵌入一些图像,这样我就只需要一个swf。 它们需要在一个数组中,因为我需要通过编程修改它们,它们可以是100个图像。不能使用flex,因为我想在actionscript中保留整个函数(也称为使文件变小)

我发现如何在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);
...
。。。
...
addChild(测试[1]作为某物);
...
除了在Actionscript中,还有人知道如何执行上述操作吗?


非常感谢。

我认为回答您的问题需要一些澄清

首先,您发布的代码是MXML(不是Flex)。MXML只是编写ActionScript的一种方式,而不必了解ActionScript。如果您在ActionScript中编写代码,它还将删除大量必须完成的工作。当Flex创建SWF时,它会查看MXML并在幕后从中创建ActionScript

第二,我们大多数人所说的“Flex”有两个部分。有FlexBuilder,这是您编写Flex应用程序的应用程序,还有Flex。Flex主要只是一组附加的ActionScript库,与基本ActionScript语言相比,它为我们提供了许多附加功能

我认为您将MXML称为“Flex”。值得一提的是,据我所知,使用MXML不会增加文件大小,因为MXML在创建SWF之前会转换为ActionScript

因此,对您的问题的最佳答案可能是继续使用MXML

如果不是这样,那么:

通过将嵌入元数据标记与类对象结合使用,可以在ActionScript中嵌入图像和其他资产

您可以在Adobe的“Advanced Flex Programming”(高级Flex编程)文档的这一节中看到一个很好的示例

然而,对于数百张图像来说,这样做真的很乏味。甚至比在MXML中执行更重要。我强烈建议在运行时以编程方式加载它们。这将大大减少代码,用户的下载时间也将大大缩短,等等


希望这会有所帮助。

我认为回答您的问题需要一些澄清

首先,您发布的代码是MXML(不是Flex)。MXML只是编写ActionScript的一种方式,而不必了解ActionScript。如果您在ActionScript中编写代码,它还将删除大量必须完成的工作。当Flex创建SWF时,它会查看MXML并在幕后从中创建ActionScript

第二,我们大多数人所说的“Flex”有两个部分。有FlexBuilder,这是您编写Flex应用程序的应用程序,还有Flex。Flex主要只是一组附加的ActionScript库,与基本ActionScript语言相比,它为我们提供了许多附加功能

我认为您将MXML称为“Flex”。值得一提的是,据我所知,使用MXML不会增加文件大小,因为MXML在创建SWF之前会转换为ActionScript

因此,对您的问题的最佳答案可能是继续使用MXML

如果不是这样,那么:

通过将嵌入元数据标记与类对象结合使用,可以在ActionScript中嵌入图像和其他资产

您可以在Adobe的“Advanced Flex Programming”(高级Flex编程)文档的这一节中看到一个很好的示例

然而,对于数百张图像来说,这样做真的很乏味。甚至比在MXML中执行更重要。我强烈建议在运行时以编程方式加载它们。这将大大减少代码,用户的下载时间也将大大缩短,等等


希望这会有所帮助。

好吧,不管怎样,你需要为你想嵌入的每一件事都使用一个嵌入语句,所以你真的无法绕过它。但是,如果您希望在脚本中处理所有内容,您可以这样做(这是一个AIR应用程序,但WindowedApplication标记之间的所有内容都应该在普通的ol'Flex应用程序中工作):


因此,在确保所有图像都在编译时嵌入并根据某种数字方案命名(在本例中,只是附加了一个索引)之后,基本上您要做的是用类引用填充数组,然后在createChildren()期间实例化并将其添加到显示列表中组件生命周期的阶段


这里有一些深奥的东西,所以如果你不完全理解一切,请随时回复,我会密切关注。但这是经过测试的代码,考虑到您迄今为止对需求的解释,它应该对您非常有效。

好吧,不管怎样,您都需要一个嵌入语句来实现您想要嵌入的每件事情,所以您无法真正绕过它。但是,如果您希望在脚本中处理所有内容,您可以这样做(这是一个AIR应用程序,但WindowedApplication标记之间的所有内容都应该在普通的ol'Flex应用程序中工作):


因此,在确保所有图像都在编译时嵌入并根据某种数字方案命名(在本例中,只是附加了一个索引)之后,基本上您要做的是用类引用填充数组,然后在createChildren()期间实例化并将其添加到显示列表中组件生命周期的阶段


这里有一些深奥的东西,所以如果你不完全理解一切,请随时回复,我会密切关注。但这是经过测试的代码,考虑到您迄今为止对需求的解释,它应该对您非常有效。

在运行时加载确实是最好的方法。。。不过,使用MXML会产生更大的文件,因为flex框架非常大(尽管框架缓存会有所帮助),而编写无框架MXML并不容易
<?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>