13

Actionscript / Flex 3(Flash)で多くの画像が使用されているゲームを作成しています。デザイナーの段階に達したので、埋め込まれた画像を使用する構造的な方法を考え出す必要があります(回転や色などで操作する必要があります)。

残念ながら、少し調べてみると、画像を使用する前に手動で画像を埋め込む必要があるようです。私は現在、次のように設定しています。

Resource.asクラスファイル:

package
{
    public final class Resource
    {
        [Embed (source="/assets/ships/1.gif" )]
        public static const SHIPS_1:Class;
    }
}

ですから、1隻の船については、次のことを行う必要があります。

画像を正しいフォルダに正しい名前で配置します同じ方法でResource.asファイルに名前を付けますResource.asファイルに同じ名前の定数を作成します

これはすべて、ファイルを指定されたフォルダーに置くだけで可能になるはずですが。

さらに悪いことに、私はまだそれを使用して呼び出す必要があります:

var test:Bitmap = new Resource.SHIPS_1();

非常に巨大なアプリケーションを作成するときにリソースを処理するためのより良い方法が必要ですか?何千もの画像が必要だと想像してみてください。このシステムは単純に適合しません。

4

12 に答える 12

16

大量のリソースを処理する必要がある場合は、次の 3 つの手順に従うことができます。

  1. それらを圧縮されていない zip アーカイブに配置します

  2. zip ファイルをバイナリ データとして埋め込みます。

    [埋め込み (ソース = 'resources.zip', mimeType = 'アプリケーション/オクテット ストリーム')]

  3. FZipを使用してリソースにアクセスする

外部ファイルの読み込みを伴う別の方法を選択する場合、一部のフラッシュ ゲーム Web サイトでは、ホストするゲームを 1 つの swf ファイルに含める必要があることに注意してください。

于 2009-06-28T21:53:14.773 に答える
6

それ以外の

var test:Bitmap = new Resource.SHIPS_1();

使用する

myImage.source = Resource.SHIPS_1;

埋め込みは正しいです。:Dあなたの使い方は間違っています:)

エイドリアン

于 2009-06-27T20:36:46.063 に答える
5

これこそまさに Flash CS4 の目的です。ただし、クラス名が定数であっても、クラス名にすべて大文字を使用することはありませんが、あなたのやり方は私には問題ないようです。頭を下げて、コピペしてください!

または、実行時にファイルをロードすることもできます。

于 2009-06-27T22:33:56.153 に答える
2

これは古いものですが、何か違うものを探して偶然見つけたので、将来の世代のためにここに書きます:)

私は別のアプローチを使用します。Flash Professional で SWF ムービーを作成し、その中のすべてのグラフィックをインポートしてから、それらをすべて「ActionScript 用にエクスポート」としてマークします。swfをコンパイルし、メインプロジェクトにswfのみを埋め込み、それを介してすべてのグラフィックにアクセスします...

このアプローチは、より組織化されていると思います。ファイルを正しくインポートすることでリソース クラス全体を作成できるのに、なぜ全体のリソース クラスを作成するのでしょうか。;)

于 2011-10-19T16:16:30.003 に答える
2

Starling フレームワークに関するこの素晴らしいチュートリアルを見ました: http://www.hsharma.com/tutorials/starting-with-starling-ep-3-sprite-sheets/

スプライト シートはまさにあなたが探しているもののようです: 個々のテクスチャをすべてスプライト シートと呼ばれる 1 つの大きなテクスチャにバンドルし、テクスチャがスプライト シート内にある場所の情報を含む xml ファイルを作成します。これを行うには、次のツールを使用できます: http://www.codeandweb.com/texturepacker

商用プロジェクトに使用できるかどうかはわかりません。あなたが話しているテクスチャの量は、趣味としてこれを行っているようには聞こえないので、ライセンスを確認することをお勧めします. 利用可能なプロ版もあります。

Texturepacker は、spritesheet.png と spritesheet.xml の 2 つのファイルを作成します。それらをプロジェクトにコピーするだけです。次に、このコードをクラスの 1 つに追加します。

    private static var gameTextureAtlas:TextureAtlas;

    [Embed(source="../media/graphics/mySpriteSheet.png")]
    public static const AtlasTextureGame:Class;

    [Embed(source="../media/graphics/mySpritesheet.xml", mimeType="application/octet-stream")]
    public static const AtlasXmlGame:Class;

    public static function getAtlas():TextureAtlas
    {
        if(gameTextureAtlas==null)
        {
            var texture:Texture=getTexture("AtlasTextureGame");
            var xml:XML=XML(new AtlasXmlGame());
            gameTextureAtlas=new TextureAtlas(texture,xml);
        }
        return gameTextureAtlas;
    }

これで、スプライト シートのすべてのテクスチャにアクセスできるようになりました。

YourClass.getAtlas().getTexture("name");

それは単に素晴らしいです。texturepacker を使用している場合、スプライトシートにバンドルした各スプライトのファイル名がそのテクスチャ名になります。

これはおそらく手遅れですが、将来の訪問者がこのエレガントなソリューションから利益を得ることができることを願っています.

この回答は基本的にシャルマのチュートリアルからの抜粋であることを強調したいと思います。彼がスクリーンキャストで使用したコードを自由に再現することさえできました。すべての功績は彼にある

于 2012-10-13T14:24:20.490 に答える
1

個々の画像の大きさにもよりますが、スプライトシートのようにすべてを 1 つの画像に収めることができます。特定の船を描画する場合は、その船の画像で正しい xy オフセットを使用し、copyPixels を使用してビットマップに描画します。

于 2011-06-11T18:15:12.480 に答える
1
package
{
    public final class Resource
    {
        [Embed (source="/assets/ships/1.gif" )]
        public static const SHIPS_1:Class;
    }
}
于 2012-02-20T05:06:39.873 に答える
0

[埋め込み (source="/assets/images/123.png" )] public static const className:Class;

于 2012-04-02T07:35:30.300 に答える
0

いい考えだな

これは、vtf と vmt を使用した Source-Engine のような優れたソリューションです vtf = image vmt = script (xml や javascript など)

TexturePacker、TexturePath、またはTextureTargetについて提案したいと思います:P

ヒントをありがとう。

例: mytexture.js:

xml または javascript:

function mytexture(){ basedir = "/assets/mytexture.png", normalmap = "/assets/mytexture_bump.png", normalcube ) [ 1, 1, 1 ] };

デフォルトのテクスチャが mytexture.png が存在しない場所でエラーが発生するため、それが再び発生するとは思わない:)

[Embed(source=".​​./assets/editors/error_texture.png")] public static const ERROR_TEX:Class; ...

Actionscript 3 は jsBirdge や ExternalInterface.call(); のような JavaScript を「読み取る」必要があるため、どうすればわかりますか?

出来ますか?

于 2012-11-20T21:40:11.580 に答える
0
[Embed (source="/assets/ships/1.gif" )]
    public static const SHIPS_1:Class;
于 2012-03-05T12:53:34.753 に答える
0

私はこのように図書館の授業をするのが好きです。

シングルトンの GSkinners コードを使用しました: http://gskinner.com/blog/archives/2006/07/as3_singletons.html

package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;

    public class Lib
    {
        /*
        Make this an Singleton, so you only load all the images only Once 
        */

        private static var instance:Lib;
        public static function getInstance():Lib {
            if (instance == null) {
                instance = new Lib(new SingletonBlocker());
            }
            return instance;
        }
        public function Lib(p_key:SingletonBlocker):void {
            // this shouldn't be necessary unless they fake out the compiler:
            if (p_key == null) {
                throw new Error("Error: Instantiation failed: Use Singleton.getInstance() instead of new.");
            }
        }

        /*
        The actual embedding 
        */
        [Embed(source="assets/images/someImage.png")]
        private var ImageClass:Class;
        private var _imageClass:Bitmap = new ImageClass() as Bitmap;

        [Embed(source="assets/images/someOtherImage.png")]
        private var OtherImageClass:Class;
        private var _otherImageClass:Bitmap = new ImageClass() as Bitmap;

        public function get imgClass():Bitmap{
            return _imageClass;
        }
        public function get imgClassData():BitmapData{
            return _imageClass.BitmapData;
        }

        public function get otherImageClass():Bitmap{
            return _otherImageClass;
        }
        public function get otherImageClassData():BitmapData{
            return _otherImageClass.BitmapData;
        }
    }
}
internal class SingletonBlocker {}
于 2012-03-29T14:49:36.480 に答える
-1

はるかに優れたアプローチ http://itfailed.blogspot.com/2011/02/howt-o-embed-images-in-actionscript-3.html

于 2011-02-06T19:27:24.647 に答える