コンテンツの動的ロード

次の外部表示アセットを ActionScript 3.0 アプリケーションにロードできます。

これらのアセットをロードするには、Loader クラスを使用します。

サブトピック

Loader クラス
LoaderInfo クラス
LoaderContext クラス

Loader クラス

Loader オブジェクトを使用して、アプリケーションに SWF ファイルおよびグラフィックファイルをロードします。Loader クラスは、DisplayObjectContainer クラスのサブクラスです。Loader オブジェクトには、表示リスト内の子表示オブジェクト、つまりロードされる SWF ファイルまたはグラフィックファイルを表す表示オブジェクトを 1 つだけ含むことができます。表示リストに Loader オブジェクトを追加するときは、次のコードのように、子表示オブジェクトのロードが完了したら、ロードされた子表示オブジェクトも表示リストに追加します。

var pictLdr:Loader = new Loader();
var pictURL:String = "banana.jpg"
var pictURLReq:URLRequest = new URLRequest(pictURL);
pictLdr.load(pictURLReq);
this.addChild(pictLdr);

SWF ファイルまたはイメージがロードされると、ロードされた表示オブジェクトを、この例の container DisplayObjectContainer オブジェクトなどの別の表示オブジェクトコンテナに移動できます。

import flash.display.*;
import flash.net.URLRequest;
import flash.events.Event;
var container:Sprite = new Sprite();
addChild(container);
var pictLdr:Loader = new Loader();
var pictURL:String = "banana.jpg"
var pictURLReq:URLRequest = new URLRequest(pictURL);
pictLdr.load(pictURLReq);
pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded); 
function imgLoaded(e:Event):void
{
    container.addChild(pictLdr.content);
}

LoaderInfo クラス

ファイルがロードされると、LoaderInfo オブジェクトが作成されます。このオブジェクトは、Loader オブジェクトおよびロードされた表示オブジェクト両方のプロパティです。つまり、LoaderInfo オブジェクトは、Loader オブジェクトの contentLoaderInfo プロパティ経由の Loader オブジェクトのプロパティであり、表示オブジェクトの loaderInfo プロパティでロードされた表示オブジェクトのプロパティです。ロードされた表示オブジェクトの loaderInfo プロパティは、Loader オブジェクトの contentLoaderInfo プロパティと同じ LoaderInfo オブジェクトを参照します。つまり、LoaderInfo オブジェクトは、ロードされたオブジェクトとロードした Loader オブジェクト間 (ロードされる側とロードする側) で共有されます。

LoaderInfo クラスは、ロードの進行状況、ロードする側とロードされる側の URL、メディアの総バイト数、メディアの規格高さと幅などの情報を提供します。LoaderInfo オブジェクトは、ロードの進行状況を監視するためのイベントも送出します。

ロードされたコンテンツのプロパティにアクセスするには、次のコードのように、LoaderInfo オブジェクトにイベントリスナーを追加します。

import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;

var ldr:Loader = new Loader();
var urlReq:URLRequest = new URLRequest("Circle.swf");
ldr.load(urlReq);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
addChild(ldr);

function loaded(event:Event):void
{
    var content:Sprite = event.target.content;
    content.scaleX = 2;
}

詳細については、「イベントの処理」を参照してください。

次の図は、LoaderInfo オブジェクトのさまざまな使用方法を示しています。このオブジェクトは、SWF ファイルのメインクラスのインスタンスや Loader オブジェクトに使用されるほか、Loader オブジェクトによってロードされたオブジェクトにも使用されます。


LoaderInfo オブジェクトを SWF ファイルのメインクラス、ローダーの contentLoaderInfo プロパティ、またはロードされたコンテンツの loaderInfo プロパティとして使用する方法を示す図。

LoaderContext クラス

Loader クラスの load() または loadBytes() メソッドを使用して Flash Player に外部ファイルをロードする場合、context パラメータを指定することもできます。このパラメータは LoaderContext オブジェクトです。

LoaderContext クラスには、ロードされたコンテンツの使用方法のコンテキストを定義できる次の 3 つのプロパティが含まれています。

次に、別のドメインからビットマップをロードするときに、クロスドメインポリシーファイルの有無をチェックする例を示します。

var context:LoaderContext = new LoaderContext();
context.checkPolicyFile = true;
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/photo11.jpg");
var ldr:Loader = new Loader();
ldr.load(urlReq, context);

次に、SWF ファイルを Loader オブジェクトと同じセキュリティサンドボックスに置くために、
別のドメインから SWF ファイルをロードするときに、クロスドメインポリシーファイルの有無をチェックする例を示します。また、このコードは、ロードされた SWF ファイルのクラスを Loader オブジェクトと同じアプリケーションドメインに追加します。

var context:LoaderContext = new LoaderContext();
context.securityDomain = SecurityDomain.currentDomain;
context.applicationDomain = ApplicationDomain.currentDomain;
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/library.swf");
var ldr:Loader = new Loader();
ldr.load(urlReq, context);

詳細については、『ActionScript 3.0 リファレンスガイド』の LoaderContext クラスの説明を参照してください。


Flex 2.01