Inställning av scenegenskaper

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Scenklassen åsidosätter de flesta egenskaper och metoder i klassen DisplayObject. Om du anropar en av dessa åsidosatta egenskaper eller metoder genereras ett undantag i Flash Player och AIR. Scenobjektet, exempelvis, har inte egenskaperna x eller y eftersom det har en fast position som programmets huvudbehållare. Egenskaperna x och y hänvisar till positionen hos ett visningsobjekt i relation till dess behållare. Eftersom scenen inte ingår i någon annan behållare för visningsobjekt används inte dessa egenskaper.

Obs! En del egenskaper och metoder i scenklassen är bara tillgängliga för visningsobjekt som är i samma säkerhetssandlåda som den första inlästa SWF-filen. Mer information finns i Scen, säkerhet .

Kontrollera uppspelningens bildrutehastighet

Egenskapen framerate i klassen Stage används för att ange bildrutehastigheten för alla inlästa SWF-filer i programmet. Du hittar mer information i Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen .

Kontrollera scenskalning

När storleken på den del av skärmen som visar Flash Player eller AIR ändras justeras sceninnehållet automatiskt. Egenskapen scaleMode för klassen Stage anger hur sceninnehållet justeras. Den här egenskapen kan anges med fyra olika värden, som är definierade som konstanter i klassen flash.display.StageScaleMode:

  • StageScaleMode.EXACT_FIT skalar SWF-filen så att den fyller scenens nya storlek, utan hänsyn till det ursprungliga innehållets proportioner. Skalningsfaktorerna kanske inte är samma för bredden som för höjden, så innehållet kan se ihoptryckt eller utsträckt ut om scenens proportioner ändras.

  • StageScaleMode.SHOW_ALL skalar SWF-filen så att den passar helt innanför scenens nya mått, utan att ändra innehållets proportioner. Det här skalningsläget visar allt innehåll, men kan ge upphov till s.k. letterbox-kanter, svarta fält som visas i kanterna när en bredbildsfilm visas på en standard-tv.

  • StageScaleMode.NO_BORDER skalar SWF-filen så att den fyller scenens nya storlek, utan att ändra innehållets proportioner. Det här skalningsläget utnyttjar scenens visningsområde fullt ut, men kan orsaka beskärning.

  • StageScaleMode.NO_SCALE skalar inte SWF-filen. Om scenens nya storlek är mindre beskärs innehållet, och om den är större blir de tillagda områdena tomma.

    I skalningsläget StageScaleMode.NO_SCALE kan egenskaperna Width och Height i klassen Stage användas för att avgöra de faktiska pixeldimensionerna för den nya scenstorleken. (I övriga skalningslägen återspeglar egenskaperna stageWidth och stageHeight alltid den ursprungliga bredden och höjden för SWF.) Dessutom, när scaleMode är angivet med StageScaleMode.NO_SCALE och SWF-filen har ändrat storlek, skickas scenklassens resize -händelse så att du kan göra de justeringar som behövs.

    Detta innebär, att om scaleMode är angivet med StageScaleMode.NO_SCALE får du större möjlighet att kontrollera hur skärminnehållet justeras till fönsterstorleken. I till exempel en SWF-fil som innehåller en video och ett kontrollfält kanske du vill att kontrollfältet ska ha bibehållen storlek om scenstorleken ändras; därmed behöver du ändra endast storleken på videofönstret för att justera enligt ändrad scenstorlek. Följande exempel visar detta:

    // mainContent is a display object containing the main content; 
    // it is positioned at the top-left corner of the Stage, and 
    // it should resize when the SWF resizes. 
     
    // controlBar is a display object (e.g. a Sprite) containing several 
    // buttons; it should stay positioned at the bottom-left corner of the 
    // Stage (below mainContent) and it should not resize when the SWF 
    // resizes. 
     
    import flash.display.Stage; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 
     
    var swfStage:Stage = mainContent.stage; 
    swfStage.scaleMode = StageScaleMode.NO_SCALE; 
    swfStage.align = StageAlign.TOP_LEFT; 
    swfStage.addEventListener(Event.RESIZE, resizeDisplay); 
     
    function resizeDisplay(event:Event):void 
    { 
        var swfWidth:int = swfStage.stageWidth; 
        var swfHeight:int = swfStage.stageHeight; 
     
        // Resize the main content area 
        var newContentHeight:Number = swfHeight - controlBar.height; 
        mainContent.height = newContentHeight; 
        mainContent.scaleX = mainContent.scaleY; 
         
        // Reposition the control bar. 
        controlBar.y = newContentHeight; 
    }

Ställa in scenskalningslägen för AIR-fönster

Scenens scaleMode -egenskap avgör hur underordnade visningsobjekt skalas och klipps när storleken på ett fönster ändras. Endast noScale -läget bör användas i AIR. I det här läget skalas inte scenen. I stället ändras scenens storlek inom fönstrets gränser. Objekt kan klippas bort om storleken på fönstret minskas.

Scenskalningslägen är utformade för webbläsare och liknande miljöer, där du inte alltid har kontroll över scenens storlek eller proportioner. Med hjälp av dessa lägen kan du välja den bästa kompromissen för situationer när scenen inte stämmer överens med den ideala storleken eller proportionerna för programmet. I AIR har du alltid kontroll över scenen, och i de flesta fall kan du få ett bättre resultat genom att göra om layouten för innehållet eller justera fönsterstorleken, i stället för att aktivera skalning av scenen.

I webbläsaren och det ursprungliga AIR-fönstret läses förhållandet mellan fönsterstorleken och den ursprungliga skalfaktorn in från den inlästa SWF-filen. Om du däremot skapar ett NativeWindow-objekt väljer AIR ett arbiträrt förhållande mellan fönsterstorleken och skalfaktorn 72:1. Det betyder att om fönstret är 72 x 72 pixlar ritas en rektangel med storleken 10 x 10 som har lagts till i fönstret med den korrekta storleken 10 x 10 pixlar. Om fönstret är 144 x 144 pixlar skalas en rektangel med storleken 10 x 10 pixlar till 20 x 20 pixlar. Om du fortfarande vill använda scaleMode i stället för noScale för en fönsterscen, kan du kompensera genom att ställa in skalfaktorn för visningsobjekten i fönstret till skalan 72 pixlar till aktuell bredd och höjd för scenen. Följande kod beräknar till exempel den skalfaktor som krävs för ett visningsobjekt med namnet client :

if(newWindow.stage.scaleMode != StageScaleMode.NO_SCALE){ 
client.scaleX = 72/newWindow.stage.stageWidth; 
client.scaleY = 72/newWindow.stage.stageHeight; 
}
Obs! I Flex- och HTML-fönster ställs scenen automatiskt in från scaleMode till noScale . Om du ändrar scaleMode stör det den automatiska layoutfunktionen som används i den här typen av fönster.

Arbeta i helskärmsläge

Med helskärmsläge kan du ställa in en filmscen så att den fyller hela bildskärmen, utan några behållarkanter eller menyer. Scenklassens egenskap displayState används till att växla mellan helskärmsläge och vanligt läge för en SWF-fil. Egenskapen displayState kan anges med något av värdena som finns definierade med konstanterna i klassen flash.display.StageDisplayState. Om du vill växla till helskärmsläge tilldelar du egenskapen displayState värdet StageDisplayState.FULL_SCREEN :

stage.displayState = StageDisplayState.FULL_SCREEN; 

Om du vill aktivera interaktivt helskärmsläge (nytt i Flash Player 11.3) anger du egenskapen displayState som StageDisplayState.FULL_SCREEN_INTERACTIVE :

stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 

Helskärmsläge i Flash Player kan endast initieras via en musklickning (även högerklick) eller tangenttryckning i ActionScript. AIR-innehåll som körs i säkerhetssandlådan application kräver inte att helskärmsläget används som svar på en användargest.

Om du vill stänga helskärmsläget tilldelar du egenskapen displayState värdet StageDisplayState.NORMAL .

stage.displayState = StageDisplayState.NORMAL; 

Dessutom kan användaren välja att avbryta helskärmsläget genom att växla fokus till ett annat fönster eller genom att använda någon av flera tangentkombinationer: Esc-tangenten (alla plattformar), Ctrl-W (Windows), Kommando-W (Mac) eller Alt-F4 (Windows).

Aktivera helskärmsläge i Flash Player

Om du vill aktivera helskärmsläge för en SWF-fil som är inbäddad på en HTML-sida måste HTML-koden som bäddar in Flash Player innehålla en param -tagg och ett embed -attribut med namnet allowFullScreen och värdet true enligt följande:

<object> 
    ... 
    <param name="allowFullScreen" value="true" /> 
    <embed ... allowFullScreen="true" /> 
</object>

Välj Arkiv -> Publiceringsinställningar i utvecklingsverktyget i Flash och välj sedan mallen Endast Flash - Tillåt helskärm på fliken HTML i dialogrutan Publiceringsinställningar.

I Flex ser du till att HTML-mallen omfattar <object> - och <embed> -taggarna som stöder helskärm.

Om du använder JavaScript i en webbsida för att generera SWF-inbäddande taggar måste du ändra JavaScript-koden och lägga till taggen och attributet allowFullScreen param . Om HTML-sidan till exempel använder funktionen AC_FL_RunContent() (som används på HTML-sidor som genererats av Flash Professional och Flash Builder) bör du lägga till parametern allowFullScreen i det funktionsanropet enligt följande:

AC_FL_RunContent( 
    ... 
    'allowFullScreen','true', 
    ... 
    ); //end AC code

Detta gäller inte för SWF-filer som körs i den fristående Flash Player.

Obs! Om du ställer in fönsterläget (wmode i HTML) på ogenomskinlig fönsterlös (opaque) eller genomskinlig fönsterlös (transparent) blir helskärmsfönstret ogenomskinligt

Det finns också säkerhetsrelaterade restriktioner som begränsar användningen av helskärmsläge med Flash Player i en webbläsare. Dessa begränsningar beskrivs i avsnittet Säkerhet .

Aktivera interaktivt helskärmsläge i Flash Player 11.3 och senare

Flash Player 11.3 och senare versioner har stöd för interaktivt helskärmsläge, vilket ger fullständigt stöd för alla tangentbordstangenter (utom Esc , som avslutar det interaktiva helskärmsläget). Helskärmsläge är användbart för spel (till exempel för att chatta i ett fleranvändarspel eller för WASD-tangentbordskontroller i ett FPS-spel (First-Person Shooter)).

Om du vill aktivera interaktivt helskärmsläge för en SWF-fil som bäddats in på en HTML-sida måste HTML-koden för att bädda in Flash Player innehålla en param -tagg och ett embed -attribut med namnet allowFullScreenInteractive och värdet true , enligt nedanstående:

<object> 
    ... 
    <param name="allowFullScreenInteractive" value="true" /> 
    <embed ... allowFullScreenInteractive="true" /> 
</object>

Välj Arkiv -> Publiceringsinställningar i utvecklingsverktyget i Flash och välj sedan mallen Endast Flash - Tillåt helskärm på fliken HTML i dialogrutan Publiceringsinställningar.

I Flash Builder och Flex kontrollerar du att HTML-mallen innehåller taggarna <object> och <embed> , som har stöd för interaktivt helskärmsläge.

Om du använder JavaScript på en webbsida för att generera taggarna för SWF-inbäddning måste du ändra JavaScript-koden och lägga till taggen allowFullScreenInteractive param och attributet. Om HTML-sidan till exempel använder funktionen AC_FL_RunContent() (som används på HTML-sidor som genererats av Flash Professional och Flash Builder) bör du lägga till parametern allowFullScreenInteractive i det funktionsanropet enligt följande:

AC_FL_RunContent( 
    ... 
    'allowFullScreenInteractive','true', 
    ... 
    ); //end AC code

Detta gäller inte för SWF-filer som körs i den fristående Flash Player-versionen.

Scenstorlek och skalning i helskärmsläge

Egenskaperna Stage.fullScreenHeight och Stage.fullScreenWidth returnerar höjd och bredd på bildskärmen som används vid helskärmsstorleken, om läget aktiveras omedelbart. Dessa värden kan bli fel om användaren har möjlighet att flytta webbläsaren från en bildskärm till en annan efter det att värdena har hämtats men innan helskärmsläget aktiveras. Om du hämtar värdena i samma händelsehanterare där egenskapen Stage.displayState tilldelats värdet StageDisplayState.FULL_SCREEN , stämmer värdena. Om en användare har flera bildskärmar expanderas SWF-innehållet så att bara en bildskärm fylls. I Flash Player och AIR används en mätmetod för att avgöra vilken bildskärm som innehåller den största andelen av SWF-innehåll och använda denna vid helskärmsläge. Egenskaperna fullScreenHeight och fullScreenWidth återspeglar endast storleken på den skärm som används i helskärmsläge. Du hittar mer information i avsnitten om Stage.fullScreenHeight och Stage.fullScreenWidth i Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen .

Scenskalning vid helskärmsläge är samma som vid normalläge; skalningen kontrolleras via scenklassens egenskap scaleMode . Om egenskapen scaleMode är angiven med StageScaleMode.NO_SCALE ändras scenegenskaperna stageWidth och stageHeight och återspeglar storleken på skärmarean som innehåller SWF-filen (i detta fall hela skärmen), om den visas i webbläsaren med HTML-parametern för den här inställningen.

Du kan använda scenklassens händelse fullScreen för att ta reda på och reagera på huruvida helskärmsläget används eller inte. Du kanske vill omplacera, lägga till eller ta bort objekt från skärmen när helskärmsläge används, som i detta exempel:

import flash.events.FullScreenEvent; 
 
function fullScreenRedraw(event:FullScreenEvent):void 
{ 
    if (event.fullScreen) 
    { 
        // Remove input text fields. 
        // Add a button that closes full-screen mode. 
    } 
    else 
    { 
        // Re-add input text fields. 
        // Remove the button that closes full-screen mode. 
    } 
} 
 
mySprite.stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenRedraw);

Som du ser i koden är händelseobjektet för händelsen fullScreen en instans av klassen flash.events.FullScreenEvent, som innehåller egenskapen fullScreen som anger om helskärmsläget används ( true ) eller inte ( false ).

Stöd för tangentbord i helskärmsläge

Alla tangentbordsrelaterade ActionScript, till exempel tangentbordshändelser och textinmatning i TextField-instanser, inaktiveras i helskärmsläge när Flash Player körs i en webbläsare. Undantagen (de tangenter som aktiveras) är:

  • valda tangenter som inte skrivs ut, t.ex. piltangenterna, blankstegstangenten och tabbtangenten

  • kortkommandon som inaktiverar helskärmsläget: Esc (Windows och Mac), Ctrl-W (Windows), Command-W (Mac) och Alt-F4.

Dessa begränsningar gäller inte för SWF-innehåll som körs i den fristående Flash Player eller i AIR. AIR stöder ett interaktivt helskärmsläge som tillåter indata från tangentbordet.

Stöd för mus i helskärmsläge

Som standard fungerar mushändelser i helskärmsläge på samma sätt som utan helskärmsläge. I helskärmsläge kan du dock ange egenskapen Stage.mouseLock för att aktivera låsning av musen, om du vill. Om du låser musen inaktiveras markören och obegränsade musrörelser aktiveras.

Obs! Du kan bara aktivera låsning av musen i helskärmsläge för skrivbordsprogram. Om du anger det på program som inte är i helskärmsläge, eller program på mobila enheter, genereras ett undantagsfel.

Låsning av musen inaktiveras automatiskt, och musmarkören blir synlig igen när:

  • Användaren avslutar helskärmsläget med Esc-tangenten (alla plattformar), Ctrl-W (Windows), Kommando-W (Mac) eller Alt-F4 (Windows).

  • Programfönstret förlorar fokus.

  • Eventuella inställningsgränssnitt är synliga, inklusive alla sekretessdialogrutor.

  • En systemspecifik dialogruta visas, t.ex. en dialogruta för filöverföring.

Händelser som är kopplade till musrörelser, som mouseMove -händelsen, använder klassen MouseEvent för att representera händelseobjektet. När låsning av musen är inaktiverat använder du egenskaperna MouseEvent.localX och MouseEvent.localY för att fastställa var musen finns. När låsning av musen är aktiverat använder du egenskaperna MouseEvent.movementX och MouseEvent.movementY för att fastställa var musen finns. Egenskaperna movementX och movementY innehåller förändringar av musens position sedan den senaste händelsen, i stället för absoluta koordinater för musens position.

Maskinvaruskalning i helskärmsläge

Med scenklassens fullScreenSourceRect -egenskap kan du ställa in Flash Player eller AIR så att ett visst område på scenen skalas efter helskärmsläget. Om det går skalar Flash Player och AIR maskinvaran med hjälp av grafik- och bildskärmskortet på användarens dator. Innehållet visas vanligtvis snabbare med maskinvaruskalning än med programvaruskalning.

För att kunna dra nytta av maskinvaruskalning ställer du in hela scenen eller en del av scenen på helskärmsläge. I följande ActionScript 3.0-kod ställs hela scenen in på helskärmsläge:

import flash.geom.*;  
{ 
    stage.fullScreenSourceRect = new Rectangle(0,0,320,240); 
    stage.displayState = StageDisplayState.FULL_SCREEN; 
}

När den här egenskapen är inställd på en giltig rektangel och egenskapen displayState är inställd på helskärmsläge skalar Flash Player och AIR det angivna området. Scenens faktiska storlek i pixlar i ActionScript ändras inte. Flash Player och AIR tillämpar en lägsta gräns för rektangelns storlek för att standardmeddelandet ”Tryck på Esc för att avsluta helskärmsläget” ska få plats. Gränsen är vanligen ungefär 260 gånger 30 pixlar, men den kan variera beroende på plattform och Flash Player-version.

Egenskapen fullScreenSourceRect kan bara ställas in när Flash Player inte är i helskärmsläge. Om du använder den här egenskapen är det viktigt att du först definierar egenskapen och sedan tilldelar egenskapen displayState värdet för helskärmsläge.

Aktivera skalning genom att ställa in egenskapen fullScreenSourceRect på ett rektangelobjekt.

stage.fullScreenSourceRect = new Rectangle(0,0,320,240);

Om du vill inaktivera skalning tilldelar du egenskapen fullScreenSourceRect värdet null .

stage.fullScreenSourceRect = null;

Om du vill utnyttja alla funktioner för maskinvaruacceleration med Flash Player aktiverar du dem i dialogrutan Flash Player-inställningar. Du öppnar dialogrutan genom att högerklicka (Windows) eller Control-klicka (Mac) i Flash Player-innehållet i webbläsaren. Markera fliken Visning, som är den första fliken, och klicka i kryssrutan: Aktivera maskinvaruacceleration.

Direkt och GPU-sammansatt fönsterläge

Flash Player 10 innehåller två nya fönsterlägen, direkt och GPU-sammansättning, som du kan aktivera via publiceringsinställningarna i utvecklingsverktyget i Flash. Dessa lägen stöds inte i AIR. Om du vill använda dessa lägen måste du aktivera maskinvaruacceleration för Flash Player.

Direkt läge använder den snabbaste, mest direkta, vägen för att skicka grafiken till skärmen, vilket är en fördel vid videouppspelning.

GPU-sammansättning använder grafikprocessorn på bildskärmskortet för att accelerera sammansättningen. Videosammansättning är en process för att placera flera bilder i lager och skapa en enda videobild. När sammansättningen accelereras med GPU kan prestanda i YUV-konvertering, färgkorrigering, rotation eller skalning samt blandning förbättras. YUV-konvertering är den färgkonvertering av sammansatta analoga signaler – som används för överföring – till RGB-färgmodellen (röd, grön, blå) som videokameror och bildskärmar använder. Om du använder GPU för att accelerera sammansättning minskar behovet av minne och datorkraft i processorn. Det blir också en jämnare uppspelning av video med standarddefinition.

Var försiktig när du implementerar dessa fönsterlägen. Att använda GPU-sammansättning kan kräva mycket minne och processorresurser. Om vissa åtgärder (till exempel blandningslägen, filtrering, urklipp eller maskering) inte kan utföras i GPU, utförs de av programvaran. Adobe rekommenderar att du begränsar dig till en SWF-fil per HTML-sida när du använder dessa lägen och du bör inte aktivera dessa lägen för banderoller. Funktionen Flash-alternativet Testa filmen har inte maskinvaruacceleration, men du kan använda den via alternativet Förhandsgranska publicering.

Om du ställer in en bildhastighet i SWF-filen som är högre än 60, är den maximala uppdateringsfrekvensen oanvändbar. Om du ställer in bildhastigheten på 50 till och med 55 kan bildrutor uteslutas, vilket då och då kan ske av olika anledningar.

Om du använder direkt läge krävs Microsoft® DirectX 9 med 128 MB VRAM i Windows och OpenGL för Apple Macintosh, Mac OS X v10.2 eller senare. För GPU-sammansättning krävs Microsoft DirectX 9 och Pixel Shader 2.0-stöd i Windows med 128 MB VRAM. Med Mac OS X och Linux krävs OpenGL 1.5 och flera OpenGL-tillägg (bildrutebuffertobjekt, flera texturer, skuggningsobjekt, skuggningsspråk och fragmentskuggning) för GPU-sammansättning.

Du kan aktivera direkt - och GPU -accelerationsläget per SWF-fil via Flash-dialogrutan Publiceringsinställningar, med hjälp av menyn Maskinvaruacceleration på fliken Flash. Om du väljer Ingen återgår fönsterläget till standard , genomskinlig eller ogenomskinlig , beroende på vad som anges i inställningen för fönsterläge på fliken HTML.