Dynamisk inläsning av visningsinnehållFlash Player 9 och senare, Adobe AIR 1.0 och senare Du kan läsa in någon av följande externa visningsresurser till ett program i ActionScript 3.0:
Inläsning av resurserna görs via klassen Loader. Inläsning av visningsobjektLoader-objekt används för att läsa in SWF-filer och grafikfiler till ett program. Klassen Loader är en underklass till klassen DisplayObjectContainer. Ett Loader-objekt kan innehålla endast ett underordnat visningsobjekt i sin visningslista – visningsobjektet som motsvarar SWF-filen eller grafikfilen som läses in. När du lägger ett Loader-objekt till visningslistan, som i nedanstående kod, kan du även lägga till det inlästa underordnade visningsobjektet till visningslistan efter inläsningen: var pictLdr:Loader = new Loader(); var pictURL:String = "banana.jpg" var pictURLReq:URLRequest = new URLRequest(pictURL); pictLdr.load(pictURLReq); this.addChild(pictLdr); När SWF-filen eller bilden är inläst kan du flytta visningsobjektet till en annan behållare för visningsobjekt, till exempel DisplayObjectContainer-objektet container i detta exempel: 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(event:Event):void
{
container.addChild(pictLdr.content);
}
Övervaka inläsningsförloppetNär filen har börjat läsas in skapas objektet LoaderInfo. Ett LoaderInfo-objekt innehåller information om inläsningsförloppet, inläsarens och utläsarens URL-adresser, det sammanlagda antalet byte för mediet samt mediets nominella höjd och bredd. Ett LoaderInfo-objekt skickar även händelser som övervakar förloppet av inläsningen. I följande diagram visas hur LoaderInfo-objektet kan användas – för huvudklassinstansen i SWF-filen, för ett Loader-objekt och för ett objekt inläst via Loader-objektet: Objektet LoaderInfo är tillgängligt som egenskap för både Loader-objektet och det inlästa visningsobjektet. Så snart inläsningen påbörjas blir LoaderInfo-objektet tillgängligt via egenskapen contentLoaderInfo i Loader-objektet. När visningsobjektet är inläst blir LoaderInfo-objektet tillgängligt även som egenskap för det inlästa visningsobjektet via egenskapen loaderInfo. Egenskapen loaderInfo för det inlästa visningsobjektet refererar till samma LoaderInfo-objekt som egenskapen contentLoaderInfo för Loader-objektet. Ett LoaderInfo-objekt delas m.a.o. mellan ett inläst objekt och det Loader-objekt som läste in det (mellan inläsare och utläsare). För att få tillgång till egenskaper för inläst innehåll måste du lägga till en händelseavlyssnare till LoaderInfo-objektet enligt följande: 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;
}
Mer information finns i Hantera händelser. Ange innehåll för inläsningNär du läser in en extern fil till Flash Player via metoderna load() eller loadBytes() i klassen Loader kan du välja att ange parametern context. Denna parameter är objektet LoaderContext. Klassen LoaderContext innehåller tre egenskaper som du anger för att definiera hur inläst innehåll ska användas:
Här är ett exempel på sökning efter en principfil vid inläsning av en bitmapp från en annan domän: 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);
Här visas ett exempel på sökning efter en principfil vid inläsning av en SWF-fil från en annan domän, för placering av filen i samma säkerhetssandlåda som Loader-objektet. Med koden läggs dessutom klasserna i den inlästa SWF-filen till i samma programdomän som Loader-objektet: 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);
Mer information finns i klassbeskrivningen för LoaderContext i Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen. |
|