1

アクション スクリプト (バージョン 3) に埋め込む必要がある約 90 枚の画像があります。私が理解できる唯一の方法は、各画像に対して次のコードを 90 回入力することです。

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

何度も書くのは本当に辛いです。プログラムでそれを行う方法があるかどうか知りたいですか?

画像がswfファイルとともに存在する必要があるため、ローダーメソッドを使用できません。コンパイルしたらswfを独立させたいです。助けてください!!!

前もって感謝します。

4

3 に答える 3

2

Windowsを使用している場合は、バッチスクリプトを使用して、埋め込みコードを含むファイルを生成できます(または、その一部を生成して、別のファイルに手動で貼り付けることができます)。

バッチは醜いですが、単純なタスクの場合はほとんど使用できます。次のコードを新しいファイルにコピーし、好きな名前を付けます(拡張子として.batを使用します)。このスクリプトを画像フォルダに入れて実行します(ダブルクリックします)。images.as.jpgで終わる画像ごとに生成されたactionscriptコードを含むファイルを作成する必要があります(他の拡張子を使用するようにスクリプトを変更できます)。

@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%
)

これは非常に基本的なことであり、ファイルの名前にスペースなどの「奇妙な」文字が含まれている場合はうまく機能しません。しかし、そうでなければ、それは重労働をする可能性があると私は思います。

于 2010-08-08T01:57:17.290 に答える
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>

それがあなたを助けることを願っています!

于 2010-08-06T13:41:58.477 に答える
0

埋め込みはコンパイル時に行われるものであり、プログラムでは実行できません。

あなたができる唯一の考えは、パスを使用して配列で生成することです。または、埋め込みに満足している場合は、Juan Pablo Clifano のトリックに同意するか、通常は Code Smith などのコード ジェネレーターを使用します。

于 2010-08-08T05:10:13.993 に答える