Starlingで画像などを扱うとき、チュートリアルなどではembedでswfにリソースを埋め込んでしまっている場合が多いですが、実際のゲーム開発ではAssetManager[1]を使った方が良いです。
理由は
です。
使い方はまず読み込みが
var assets:AssetManager = new AssetManager(); const RESOURCE_DIR:String = "resource/"; assets.enqueue(RESOURCE_DIR + "uiTexture.png"); assets.enqueue(RESOURCE_DIR + "uiTexture.xml"); assets.loadQueue(function(ratio:Number):void { trace(int(ratio * 100) + "%"); if (ratio == 1.0){ trace("load end!"); } });
loadQueueは読み込み過程を表示する関数です。AssetManager[1]は読み込んだTextuerを自動で負荷を分散しながら初期化してくれます。
もし、多解像度対応でtextureが拡大・縮小している場合は、
var assets:AssetManager = new AssetManager(2);
のようにスケール引数に入れます。
個々のTextureを取得するには、そのTextureがどのTextureAtlas[2]にあるか意識する事無く、
assets.getTexture("button.png")
として取得できます。
TextureAtlas[2]を取得することも出来ます。
assets.getTextureAtlas("uiTexture")
ですが、なるべく上記getTextureを使うのをお勧めします。なぜなら、実際のゲーム開発ではtextureAtlasが複数になることが多く、また、その中の画像を入れ替えることも多いので、getTextureAtlas[2]ではそのたびにソースコードの変更が必要になるからです。 getTextureであれば、どの画像がどのtextureAtlasにあるか知る必要がないのでtextureAtlasの変更にも対応しやすいです。
AssetManager[1]は他にもxmlやサウンドにも対応しています。しかし、ゲーム設定が簡単に書き換えられたりできるようになるので、設定ファイルはembedの方が良いかもしれません。サウンドなども著作権の関係でそのままサイトに置くと問題があるかも知れません。モバイルなら問題ないですが。
AssetManager[1]はembedしたリソースにも対応しています。 Airなら問題ないですが、上記に加えてWebだと小さな読み込みファイルが多いとサーバーへのリクエストが多くなり、同じ容量でもサーバー負荷は大きくなります。容量が小さければembedしてもローディング画面にも影響が無いので、負荷増大を防ぐためにXMLファイルや小さな効果音ファイルはembedにしたくなる場合があります。
そんなときには、embed専用のクラスを作り、それをAssetManager[1]に読み込ませる事が出来ます。
public class AssetsEmbed { [Embed(source="../../resource/setting.xml", mimeType="application/octet-stream")] public static const setting:Class; [Embed(source="../../resource/setting2.xml", mimeType="application/octet-stream")] public static const setting2:Class; }
このとき、ファイル名とクラス名を同一にする必要がありますが、テクスチャとビットマップフォントのxmlについてはファイル内部の名前が使われるのでどんなクラス名でも良いようです。
読み込むときはクラスを指定します。
assets.enqueue(AssetsEmbed);
これにより、開発中は設定ファイルを外部ファイルにしておいて、設定を変えるだけの時は時間のかかるパブリッシュをしないですませ、実際にWebにあげるときは1つにまとめる、といった柔軟な対応も可能となります。
参考: http://wiki.starling-framework.org/manual/asset_management[3]
(This host) = https://njf.jp