Impostazione delle proprietà dello stage

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

La classe Stage sostituisce la maggior parte dei metodi e delle proprietà della classe DisplayObject. Se chiamate uno di questi metodi o proprietà sostituiti, Flash Player e AIR generano un'eccezione. L'oggetto Stage, ad esempio, non presenta proprietà x o y, in quanto la sua posizione è fissa, quale contenitore principale dell'applicazione. Le proprietà x e y si riferiscono alla posizione di un oggetto di visualizzazione in relazione al suo contenitore e, poiché lo stage non è contenuto in alcun contenitore, tali proprietà non sono applicabili.

Nota: alcune proprietà e metodi della classe Stage sono disponibili solo per oggetti di visualizzazione presenti nella stessa funzione di sicurezza sandbox del primo file SWF caricato. Per maggiori dettagli, vedete la sezione Sicurezza dello stage.

Controllo della frequenza fotogrammi di riproduzione

La proprietà framerate della classe Stage viene utilizzata per impostare la frequenza fotogrammi di tutti i file SWF caricati nell'applicazione. Per ulteriori informazioni, vedete la Guida di riferimento di Adobe ActionScript 3.0 per la piattaforma Adobe Flash.

Controllo della modifica in scala dello stage

Quando si ridimensiona la parte dello schermo che rappresenta Flash Player o AIR, il runtime regola automaticamente il contenuto dello stage per compensare la discrepanza. La proprietà scaleMode della classe Stage determina come il contenuto dello stage viene regolato. Questa proprietà può essere impostata su quattro diversi valori, definiti come costanti nella classe flash.display.StageScaleMode:

  • StageScaleMode.EXACT_FIT consente di modificare in scala il file SWF per adattarlo alle nuove dimensioni dello stage, a prescindere dalle proporzioni del contenuto originale. I fattori di scala potrebbero essere diversi per larghezza e altezza, pertanto è possibile che il contenuto appaia schiacciato o allungato se le proporzioni dello stage vengono modificate.

  • StageScaleMode.SHOW_ALL consente di modificare in scala il file SWF per adattarlo interamente alle nuove dimensioni dello stage senza modificare le proporzioni del contenuto. Questa modalità scala visualizza tutto il contenuto, ma può causare bordi in stile “letterbox”, ad esempio le barre nere che appaiono durante la visualizzazione di un filmato a schermo intero su un televisore standard.

  • StageScaleMode.NO_BORDER consente di modificare in scala il file SWF per adattarlo interamente alle nuove dimensioni stage senza modificare le proporzioni del contenuto. Questa modalità scala utilizza completamente l'area di visualizzazione dello stage, ma può causare ritagli.

  • StageScaleMode.NO_SCALE: non modifica in scala il file SWF. Se le nuove dimensioni dello stage sono inferiori, il contenuto viene ritagliato; se sono superiori, lo spazio aggiunto è vuoto.

    Solo nella modalità scala StageScaleMode.NO_SCALE, le proprietà Width e Height della classe Stage possono essere utilizzate per determinare le dimensioni in pixel effettive dello stage ridimensionato (nelle altre modalità, le proprietà stageWidth e stageHeight riflettono sempre la larghezza e l'altezza originali del file SWF). Inoltre, se scaleMode è impostata su StageScaleMode.NO_SCALE e il file SWF viene ridimensionato, l'evento resize della classe Stage viene inviato, in modo che sia possibile effettuare le regolazioni appropriate.

    Di conseguenza, il valoreStageScaleMode.NO_SCALE garantisce un maggiore controllo sulla regolazione del contenuto dello schermo in base al ridimensionamento della finestra. In un file SWF contenente, ad esempio, un video e una barra di controllo, potete fare in modo che le dimensioni della barra di controllo rimangano inalterate quando ridimensionate lo stage e modificare solo le dimensioni della finestra del video per adattarle a quelle dello stage. Questo comportamento viene illustrato nell'esempio seguente:

    // 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; 
    }

Impostazione della modalità scala dello stage per finestre AIR

La proprietà scaleMode specifica il modo in cui lo stage ridimensiona e ritaglia gli oggetti di visualizzazione secondari quando una finestra viene ridimensionata. Utilizzare solo la modalità noScale in AIR. In questa modalità, lo stage non viene ridimensionato. Piuttosto, la dimensione dello stage cambia direttamente con i contorni della finestra. Se dopo il ridimensionamento la finestra è più piccola, gli oggetti possono essere ritagliati.

Le modalità scala dello stage sono progettate per l'utilizzo in ambienti come un browser Web in cui non si dispone sempre del controllo sulle dimensioni e proporzioni dello stage. Le modalità consentono di scegliere il miglior compromesso quando lo stage le dimensioni e le proporzioni dello stage non corrispondo a quelle ideali dell'applicazione. In AIR, avete sempre il controllo dello stage, pertanto, nella maggior parte dei casi, effettuare un nuovo layout del contenuto o regolare le dimensioni della finestra offre risultati migliori che non abilitare il ridimensionamento dello stage.

Nel browser e per la finestra AIR iniziale, la relazione tra le dimensioni della finestra e il fattore di scala iniziale è letta dal file SWF caricato. Tuttavia, quando create un oggetto NativeWindow, AIR sceglie una relazione arbitraria tra le dimensioni della finestra e il fattore di scala 72:1. Pertanto, in una finestra 72x72 pixel, un rettangolo 10x10 aggiunto alla finestra non viene ridimensionato. Tuttavia, in una finestra di 144x144 pixel, un rettangolo di 10x10 viene ridimensionato a 20x20 pixel. Se si insiste a utilizzare una modalità scaleMode diversa da noScale per uno stage della finestra, potete compensare impostando il fattore di scala di qualsiasi oggetto di visualizzazione nella finestra sul rapporto di 72 per la larghezza e l'altezza correnti dello stage. Ad esempio, il codice seguente calcola il fattore di scala richiesto per un oggetto di visualizzazione denominato client:

if(newWindow.stage.scaleMode != StageScaleMode.NO_SCALE){ 
client.scaleX = 72/newWindow.stage.stageWidth; 
client.scaleY = 72/newWindow.stage.stageHeight; 
}
Nota: le finestre Flex e HTML impostano automaticamente la modalità scaleMode dello stage su noScale. La modifica di scaleMode disturba il meccanismo di layout automatico utilizzato in questi tipi di finestre.

Uso della modalità a schermo intero

La modalità a schermo intero consente di impostare lo stage di un filmato in modo che occupi l'intero monitor senza menu o bordi del contenitore. La proprietà displayState della classe Stage consente di attivare e disattivare la modalità a schermo intero per un file SWF. La proprietà displayState può essere impostata su uno dei valori definiti dalle costanti nella classe flash.display.StageDisplayState. Per attivare la modalità a schermo intero, impostate la proprietà displayState su StageDisplayState.FULL_SCREEN:

stage.displayState = StageDisplayState.FULL_SCREEN; 

Per attivare la modalità interattiva a schermo intero (novità di Flash Player 11.3), impostate la proprietà displayState su StageDisplayState.FULL_SCREEN_INTERACTIVE:

stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 

In Flash Player, la modalità a schermo intero può essere avviata mediante ActionScript in risposta a un clic del mouse (anche con il pulsante destro) o alla pressione di un tasto. Il contenuto AIR in esecuzione nella funzione di sicurezza sandbox dell'applicazione non richiede il passaggio alla modalità a schermo intero in risposta a un'operazione dell'utente.

Per disattivare la modalità a schermo intero, impostate la proprietà displayState su StageDisplayState.NORMAL.

stage.displayState = StageDisplayState.NORMAL; 

Un utente può inoltre scegliere di uscire dalla modalità a schermo intero spostando lo stato attivo su un'altra finestra oppure utilizzando una delle diverse combinazioni di tasti: tasto Esc (tutte le piattaforme), Ctrl-W (Windows), Command-W (Mac) o Alt-F4 (Windows).

Attivazione della modalità a schermo intero in Flash Player

Per attivare la modalità a schermo intero per un file SWF incorporato in una pagina HTML, il codice HTML necessario per incorporare Flash Player deve includere un tag param e un attributo embed con name allowFullScreen e value true, come indicato di seguito:

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

Nello strumento di creazione di Flash, selezionate File -> Impostazioni di pubblicazione e quindi scegliete il modello Solo Flash - Consenti schermo intero nella scheda HTML della finestra di dialogo Impostazioni di pubblicazione.

In Flex accertatevi che il modello HTML includa i tag <object> e <embed> che supportano lo schermo intero.

Se utilizzate JavaScript in una pagina Web per generare i tag di incorporamento SWF, dovete modificare il codice JavaScript aggiungendo l'attributo/tag allowFullScreen param. Se, ad esempio, la pagina HTML impiega la funzione AC_FL_RunContent() (utilizzata dalle pagine HTML generate sia da Flash Professional e Flash Builder), dovete aggiungere il parametro allowFullScreen alla chiamata di funzione, come indicato di seguito:

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

Ciò non è applicabile ai file SWF eseguiti nel lettore autonomo Flash Player.

Nota: se impostate la Modalità finestra (wmode in HTML) su Opaca senza finestra (opaque) o Trasparente senza finestra (transparent), la finestra a schermo intero è sempre opaca

Sono inoltre presenti restrizioni di sicurezza per quanto riguarda l'uso della modalità a schermo intero con Flash Player in un browser. Queste restrizioni sono descritte in Sicurezza.

Attivazione della modalità interattiva a schermo intero in Flash Player 11.3 e versioni successive

Flash Player 11.3 e versioni successive supportano la modalità interattiva a schermo intero, che abilita il supporto completo per tutti i tipi di tastiera (con l'eccezione del tasto Esc, che serve per uscire dalla modalità interattiva a schermo intero). La modalità interattiva a schermo intero è utile per il gaming (ad esempio per abilitare la funzione di chat in un gioco multi-player o i controlli tastiera WASD in un gioco con sparatorie in prima persona).

Per attivare la modalità interattiva a schermo intero per un file SWF incorporato in una pagina HTML, il codice HTML necessario per incorporare Flash Player deve includere un tag param e un attributo embed con name allowFullScreenInteractive e value true, come indicato di seguito:

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

Nello strumento di creazione di Flash, selezionate File -> Impostazioni di pubblicazione e quindi scegliete il modello Solo Flash - Consenti schermo intero interattivo nella scheda HTML della finestra di dialogo Impostazioni di pubblicazione.

In Flash Builder e Flex, accertatevi che il modello HTML includa i tag <object> e <embed>, che supportano la modalità interattiva a schermo intero.

Se utilizzate JavaScript in una pagina Web per generare i tag di incorporamento SWF, dovete modificare il codice JavaScript aggiungendo l'attributo/tag allowFullScreenInteractive param. Se, ad esempio, la pagina HTML impiega la funzione AC_FL_RunContent() (utilizzata dalle pagine HTML generate sia da Flash Professional e Flash Builder), dovete aggiungere il parametro allowFullScreenInteractive alla chiamata di funzione, come indicato di seguito:

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

Ciò non è applicabile ai file SWF eseguiti nel lettore autonomo Flash Player.

Dimensione e modifica in scala dello stage a schermo intero

Le proprietà Stage.fullScreenHeight e Stage.fullScreenWidth restituiscono l'altezza e la larghezza del monitor utilizzato quando si passa alle dimensioni a schermo intero, se questo stato viene attivato immediatamente. Questi valori potrebbero essere errati se l'utente ha la possibilità di spostare il browser da un monitor a un altro dopo il recupero dei valori, ma prima dell'attivazione della modalità a schermo intero. Se recuperate i valori nello stesso gestore di eventi in cui avete impostato la proprietà Stage.displayState su StageDisplayState.FULL_SCREEN, i valori sono corretti. Per gli utenti con più monitor il contenuto del file SWF si espande fino alle dimensioni di un solo monitor. In Flash Player e AIR viene utilizzata una metrica per determinare quale monitor contiene la porzione più grande del file SWF, quindi viene utilizzato tale monitor per la modalità a schermo intero. Le proprietà fullScreenHeight e fullScreenWidth riflettono solo le dimensioni del monitor utilizzato per la modalità a schermo intero. Per ulteriori informazioni, vedete Stage.fullScreenHeight e Stage.fullScreenWidth nella Guida di riferimento di Adobe ActionScript 3.0 per la piattaforma Adobe Flash.

Il comportamento di modifica in scala dello stage per la modalità a schermo intero è identico nella modalità normale; la modifica in scala viene controllata dalla proprietà scaleMode della classe Stage. Se la proprietà scaleMode è impostata su StageScaleMode.NO_SCALE, le proprietà stageWidth e stageHeight dello stage vengono modificate per riflettere le dimensioni dell'area dello schermo occupate dal file SWF (in questo caso, l'intero schermo); in caso di visualizzazione nel browser, l'impostazione viene controllata dal relativo parametro HTML.

È possibile utilizzare l'evento fullScreen della classe Stage per rilevare se la modalità a schermo intero è attivata o disattivata e rispondere di conseguenza. Potrebbe essere necessario, ad esempio, riposizionare, aggiungere o rimuovere elementi dallo schermo quando si attiva o disattiva la modalità a schermo intero, come nell'esempio seguente:

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);

Come illustrato dal codice, l'oggetto evento dell'evento fullScreen è un'istanza della classe flash.events.FullScreenEvent, che include una proprietà fullScreen che indica se la modalità a schermo intero è attiva (true) o meno (false).

Supporto della tastiera nella modalità a schermo intero

Quando Flash Player viene eseguito in un browser, tutto il codice ActionScript relativo alla tastiera, ad esempio eventi della tastiera e immissione di testo nelle istanze TextField, è disattivato in modalità a schermo intero. Fanno eccezione i tasti seguenti, che sono attivi:

  • determinati tasti non associati a lettere o numeri, nello specifico i tasti freccia, la barra spaziatrice e il tasto Tab;

  • i tasti di scelta rapida che disattivano la modalità a schermo intero, ovvero Esc (Windows e Mac), Ctrl-W (Windows), Command-W (Mac) e Alt-F4.

Queste limitazioni non si applicano al contenuto SWF in esecuzione nel lettore autonomo Flash Player o in AIR. AIR supporta una modalità interattiva a schermo intero che consente l'input dalla tastiera.

Supporto del mouse nella modalità a schermo intero

Per impostazione predefinita, gli eventi del mouse nella modalità a schermo intero si comportano come nella modalità non a schermo intero. Tuttavia, in modalità a schermo intero è possibile impostare la proprietà Stage.mouseLock in modo da abilitare il blocco del mouse. Il blocco del mouse disattiva il cursore e abilita il movimento svincolato del mouse.

Nota: potete abilitare il blocco del mouse in modalità a schermo intero solo per le applicazioni desktop. Se lo impostate in applicazioni che non operano a schermo intero, ad esempio nelle applicazioni per dispositivi mobili, viene generata un'eccezione.

Il blocco del mouse viene disattivato e il cursore viene reso nuovamente visibile quando:

  • L'utente esce dalla modalità a schermo intero premendo il tasto Esc (tutte le piattaforme), Control-W (Windows), Comando-W (Mac) o Alt-F4 (Windows).

  • L'applicazione cessa di essere l'elemento attivo.

  • È visibile una qualsiasi interfaccia di impostazioni, comprese tutte le finestre di dialogo relative alla privacy.

  • È visualizzata una finestra di dialogo nativa, ad esempio una finestra per il caricamento di file.

Gli eventi associati al movimento del mouse, ad esempio mouseMove, utilizzano la classe MouseEvent per rappresentare l'oggetto evento. Quando il blocco del mouse è disattivato, usate le proprietà MouseEvent.localX e MouseEvent.localY per determinare la posizione del mouse. Quando il blocco è attivo, usate invece le proprietà MouseEvent.movementX e MouseEvent.movementY. Le proprietà movementX e movementY contengono i cambiamenti di posizione del mouse dall'ultimo evento, anziché le coordinate assolute della posizione del mouse.

Modifica in scala tramite hardware nella modalità a schermo intero

Potete utilizzare la proprietà fullScreenSourceRect della classe Stage per impostare Flash Player o AIR affinché modifichino in scala un'area specifica dello stage alla modalità a schermo intero. In Flash Player e AIR viene eseguita la modifica in scala tramite hardware, se disponibile, mediante la scheda grafica e video del computer dell'utente che permette in genere di visualizzare il contenuto in modo più rapido rispetto alla modifica in scala tramite software.

Per sfruttare la possibilità di applicare la modifica in scala tramite l'hardware, è necessario impostare tutto lo stage, o parte di esso, sulla modalità a schermo intero. Il seguente codice ActionScript 3.0 imposta tutto lo stage sulla modalità a schermo intero:

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

Quando questa proprietà è impostata su un rettangolo valido e la proprietà displayState è impostata sulla modalità a schermo intero, Flash Player e AIR modificano in scala l'area specificata. La dimensione effettiva dello stage in pixel in ActionScript non varia. Flash Player e AIR applicano un limite minimo per la dimensione del rettangolo che contiene il messaggio standard “Premere Esc per uscire dalla modalità a schermo intero”. Questo limite si aggira in genere intorno a 260 x 30 pixel, ma può variare in base al tipo di piattaforma e alla versione di Flash Player.

La proprietà fullScreenSourceRect può essere impostata solo se Flash Player o AIR non sono in modalità a schermo intero. Per utilizzare questa proprietà correttamente, impostate prima questa proprietà e quindi impostate la proprietà displayState sulla modalità a schermo intero.

Per consentire la modifica in scala, impostate la proprietà fullScreenSourceRect su un oggetto Rectangle.

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

Per disattivare la modifica in scala, impostate la proprietà fullScreenSourceRect su null.

stage.fullScreenSourceRect = null;

Per avvalervi di tutte le funzionalità di accelerazione hardware con Flash Player, attivate l'accelerazione hardware tramite la finestra di dialogo delle impostazioni di Flash Player. Per caricare la finestra di dialogo, fate clic con il pulsante destro del mouse (Windows) o premete il tasto Ctrl + clic (Mac) all'interno del contenuto Flash Player nel browser. Selezionate la prima scheda Display e quindi la casella di controllo di abilitazione dell'accelerazione hardware.

Modalità finestra Diretta e Composizione GPU

Con Flash Player 10 sono state introdotte due nuove modalità finestra, Diretta e Composizione GPU, che potete attivare tramite le impostazioni di pubblicazione dello strumento di creazione di Flash. Queste modalità non sono supportate in AIR. Per sfruttare queste modalità, dovete attivare l'accelerazione hardware per Flash Player.

La modalità Diretta utilizza il percorso più veloce e diretto per visualizzare la grafica sullo schermo, facilitando la riproduzione video.

La Composizione GPU utilizza l'unità di elaborazione grafica della scheda video per accelerare la composizione. Per composizione video si intende il processo di sovrapposizione di più immagini per creare un'unica immagine video. Accelerando la composizione con il GPU è possibile migliorare le prestazioni di conversione YUV, correzione colore, rotazione o ridimensionamento e fusione. La conversione YUV fa riferimento alla conversione colore di segnali analogici compositi, utilizzati per la trasmissione, nel modello colore RGB (rosso, verde, blu) utilizzato da videocamere e display. L'utilizzo di GPU per accelerare la composizione riduce le esigenze di memoria e di calcolo che verrebbero altrimenti poste sulla CPU. Il risultato è anche una riproduzione più uniforme di video a definizione standard.

Prestate molta attenzione quando implementate queste modalità video. L'uso della composizione GPU può essere onerosa in termini di memoria e risorse di elaborazione. Le operazioni che non possono essere eseguite nella GPU (ad esempio, metodi di fusione, filtraggio, ritaglio o mascheratura), devono essere completate dal software. Adobe consiglia di limitarsi a un solo file SWF per pagina HTML quando si utilizzano queste modalità e di non abilitarle per i banner. La struttura Flash Test Movie non utilizza l'accelerazione hardware ma potete impiegarla tramite l'opzione Anteprima pubblicazione.

Poiché la frequenza di aggiornamento dello schermo massima è 60, è inutile impostare nel file SWF un valore superiore. L'impostazione di una frequenza fotogrammi compresa tra 50 e 55 determina fotogrammi saltati; una situazione che si può verificare ogni tanto per diversi motivi.

L'uso della modalità Diretta richiede Microsoft DirectX 9 con 128 MB di VRAM in Windows e OpenGL per Apple Macintosh, Mac OS X v10.2 o versione successiva. La Composizione GPU richiede il supporto di Microsoft DirectX 9 e Pixel Shader 2.0 in Windows con 128 MB di VRAM. In Mac OS X e Linux, la Composizione GPU richiede OpenGL 1.5 e diverse estensioni OpenGL (oggetto framebuffer, multitexture, oggetti shader, linguaggio shading, fragment shader).

Potete attivare le modalità di accelerazione direct e gpu per ogni singolo file SWF tramite la finestra di dialogo Impostazioni pubblicazione di Flash, utilizzando il menu Accelerazione hardware della scheda Flash. Se scegliete Nessuno, la modalità finestra viene ripristinata su default, transparent o opaque, come specificato nell'impostazione Modalità finestra nella scheda HTML.