我需要将大约90张图片嵌入到动作脚本(版本3)中。我能弄明白的唯一方法是为每张图片输入以下代码90次。
[Embed(source="images/door0091.bmp")]
private var Door1:Class;
var door1:Bitmap = new Door1();
写这么多次真的很痛苦。我想知道是否有任何方式以编程方式执行此操作?
我不能使用loader方法,因为图像需要与swf文件一起出现。我希望swf在编译后是独立的。请帮助!!!
提前致谢。
答案 0 :(得分:2)
如果您使用的是Windows,则可以使用批处理脚本生成包含嵌入代码的文件(或生成部分代码并手动将其粘贴到其他文件中)。
批处理是丑陋的,但对于简单的任务,它几乎可用。将以下代码复制到一个新文件中,并将其命名为您喜欢的名称(使用.bat作为其扩展名)。将此脚本放在images文件夹中并运行它(双击它)。它应该创建一个文件images.as
,其中包含以.jpg结尾的每个图像的生成的动作脚本代码(您可以将脚本更改为使用其他扩展名)。
@echo off
set out_file=images.as
echo // script generated file > %out_file%
for /f %%a IN ('dir /b *.jpg') do (
echo [Embed^(source="images/%%a"^)] >> %out_file%
echo private var %%~na_class:Class; >> %out_file%
echo private var %%~na:Bitmap = new %%~na_class^(^); >> %out_file%
)
这是非常基本的,如果您的文件名称包含“怪异”字符(如空格),则无法正常工作。但除此之外,我认为它可以解决繁重的问题。
答案 1 :(得分:1)
有一种方法 - 如果你想使用zip文件。您可以将包含所有图像的整个zip文件嵌入到您的应用程序中。然后,在运行时打开zip文件以检索所需的图像。你可以编写自己的zip工具,或者,如下所示,只使用nochump中的免费工具:
当您调用zip.getInput()函数时,即提取单个zip条目的内容时,只有在您准备好提取特定文件时才使用该调用。
这是一个完整的演示应用程序:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import nochump.util.zip.ZipEntry;
import nochump.util.zip.ZipFile;
[Embed(source="images.zip",mimeType="application/octet-stream")]
private var imagesZip:Class;
protected function init():void
{
var theImages:Object = new imagesZip();
var zip:ZipFile = new ZipFile(theImages as IDataInput);
for each(var entry:ZipEntry in zip.entries)
{
var fileName:String = entry.name.toLowerCase();
if(fileName == "image2.jpg")
{
var loader:Loader = new Loader();
this.rawChildren.addChild(loader);
loader.loadBytes(zip.getInput(entry));
}
}
}
]]>
</mx:Script>
</mx:Application>
我希望能帮到你!
答案 2 :(得分:0)
嵌入是在编译时中完成的,你无法以编程方式完成。
唯一可以做的就是使用路径并在数组中生成它。或者如果你满足于嵌入我同意Juan Pablo Clifano技巧或者通常使用代码生成器,如Code Smith等。