【问题标题】:Embed about 90 images in the flash在 Flash 中嵌入大约 90 张图像
【发布时间】:2010-08-06 11:39:13
【问题描述】:

我有大约 90 张图片需要嵌入到动作脚本(第 3 版)中。我能弄清楚的唯一方法是为每张图片输入以下代码 90 次。

[Embed(source="images/door0091.bmp")]
    private var Door1:Class;
    var door1:Bitmap = new Door1();

写了这么多次真的很痛苦。我想知道是否有任何方法可以以编程方式进行?

我不能使用加载器方法,因为图像需要与 swf 文件一起出现。我希望 swf 在编译后是独立的。请帮忙!!!

提前致谢。

【问题讨论】:

    标签: actionscript-3 flash flash-cs5


    【解决方案1】:

    如果您使用的是 Windows,则可以使用批处理脚本生成包含嵌入代码的文件(或生成其中的一部分并手动将其粘贴到另一个文件中)。

    Batch 很难看,但对于简单的任务,它几乎是可用的。将以下代码复制到一个新文件中,并将其命名为您喜欢的任何名称(使用 .bat 作为其扩展名)。将此脚本放在您的图像文件夹中并运行它(双击它)。它应该创建一个文件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%
    )
    

    这是非常基本的,如果您的文件名包含“奇怪”字符(例如空格),它将无法正常工作。但除此之外,我认为它可以完成繁重的工作。

    【讨论】:

    • 嗨胡安.. 感谢您的回复。这工作正常,它节省了我很多时间重复编写相同的代码。谢谢!
    • @sanmax007。没问题,我很高兴它有帮助。
    【解决方案2】:

    有一种方法 - 如果您想使用 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>
    

    希望对你有所帮助!

    【讨论】:

    • 嗨,PIM...非常感谢您的回复。我将在星期一在我的办公室尝试您的上述演示应用程序...如果对此还有任何问题,我希望您必须帮助我解决这个问题...谢谢您的帮助!!!
    【解决方案3】:

    嵌入是在编译时间完成的,你不能以编程方式完成。

    您唯一能做的就是使用 path 并在数组中生成它。或者如果您对嵌入感到满意,我同意 Juan Pablo Clifano 的技巧或通常使用 Code Smith 等代码生成器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-05
      • 2013-10-13
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      相关资源
      最近更新 更多