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. |
|