Configuração de propriedades do palco

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

A classe Stage substitui a maioria das propriedades e dos métodos da classe DisplayObject. Se um desses métodos ou propriedades substituídos for chamado, o Flash Player e o AIR lançarão uma exceção. Por exemplo, o objeto Stage não tem as propriedades x ou y , pois sua posição é fixa como o principal contêiner do aplicativo. As propriedades x e y fazem referência à posição de um objeto de exibição com relação ao seu contêiner e, como o objeto Stage não está contido em nenhum outro contêiner, essas propriedades não são aplicáveis.

Nota: Alguns métodos e propriedades da classe Stage estão disponíveis somente para objetos de exibição que estão na mesma caixa de proteção de segurança do primeiro arquivo SWF carregado. Para obter detalhes, consulte segurança de Palco .

Controle da taxa de quadros de reprodução

A propriedade frameRate da classe Stage é usada para definir a taxa de quadros de todos os arquivos SWF carregados no aplicativo. Para obter mais informações, consulte Referência do ActionScript® 3.0 para Adobe® Flash® Platform .

Controle do dimensionamento do palco

Quando a parte da tela que representa o Flash Player ou o AIR é redimensionada, o tempo de execução ajusta automaticamente o conteúdo do palco para compensar. A propriedade scaleMode da classe Stage determina como o conteúdo do palco é ajustado. Essa propriedade pode ter quatro valores diferentes, definidos como constantes na classe flash.display.StageScaleMode:

  • StageScaleMode.EXACT_FIT dimensiona o SWF de modo a preencher as novas dimensões do palco sem levar em conta a proporção original do conteúdo. Os fatores de escala podem não ser os mesmos para largura e altura, o que pode fazer com que o conteúdo pareça espremido ou alongado se a proporção do palco for alterada.

  • StageScaleMode.SHOW_ALL dimensiona o SWF para fazê-lo caber inteiramente nas novas dimensões do palco sem alterar a proporção do conteúdo. Este modo de escala exibe todo o conteúdo, mas pode resultar em bordas “letterbox”, como as barras pretas exibidas durante a exibição de um filme em widescreen em uma televisão padrão.

  • StageScaleMode.NO_BORDER dimensiona o SWF de modo a preencher completamente as novas dimensões do palco sem alterar a proporção do conteúdo. Este modo de escala faz uso total da área de exibição do palco, mas pode resultar em cortes.

  • StageScaleMode.NO_SCALE – não dimensiona o SWF. Se as novas dimensões do palco forem menores, o conteúdo será cortado; se forem maiores, o espaço adicionado ficará em branco.

    Somente no modo de escala StageScaleMode.NO_SCALE , as propriedades stage Width e stage Height da classe Stage podem ser usadas para determinar as dimensões de pixel reais do palco redimensionado. Nos outros modos de escala, as propriedades stageWidth e stageHeight sempre refletem a largura e a altura originais do SWF. Além disso, quando scaleMode é definido como StageScaleMode.NO_SCALE e o arquivo SWF é redimensionado, o evento resize da classe Stage é enviado e permite fazer os ajustes adequados.

    Consequentemente, definir scaleMode como StageScaleMode.NO_SCALE permite que você tenha mais controle sobre o ajuste do conteúdo da tela para redimensionar a janela se desejar. Por exemplo, em um arquivo SWF que contém um vídeo e uma barra de controle, você talvez queira que a barra de controle permaneça do mesmo tamanho quando o palco for redimensionado e apenas o tamanho da janela do vídeo seja alterado para acomodar o novo tamanho do palco. Isso é demonstrado no exemplo a seguir:

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

Definição do modo de dimensionamento do palco para as janelas do AIR

A propriedade de palco scaleMode determina como o palco é dimensionado e corta os objetos de exibição filho quando uma janela é redimensionada. Apenas o modo noScale deve ser usado no AIR. Nesse modo, o palco não é dimensionado. Ao contrário, o tamanho do palco muda diretamente os limites da janela. Os objetos podem ser cortados se a janela for redimensionada para um tamanho menor.

Os modos de dimensionamento de palco são criados para serem usados em ambientes como um navegador de Web, no qual você nem sempre pode controlar o tamanho ou a proporção de aspecto do palco. Os modos permitem que você faça a escolha mais adequada quando o palco não corresponde ao tamanho ideal nem à proporção de aspecto do seu aplicativo. No AIR, você sempre tem controle do palco de modo que, na maioria dos casos, a nova disposição do conteúdo ou o ajuste das dimensões na janela proporcionará melhores resultados do que ativar o dimensionamento do palco.

No navegador e na janela inicial do AIR, a relação entre o tamanho da janela e o fator de escala inicial é lida do arquivo SWF carregado. Entretanto, quando você cria um objeto NativeWindow, o AIR escolhe uma relação arbitrária entre o tamanho da janela e o fator de escala 72:1. Portanto, se a sua janela tem 72x72 pixels, um retângulo de 10x10 adicionado à janela é desenhado no tamanho correto de 10x10 pixels. Entretanto, se a janela tiver 144x144 pixels, um retângulo de 10x10 pixels será dimensionado para 20x20 pixels. Se você insistir em usar um scaleMode que não seja noScale para o palco de uma janela, poderá compensar definindo o fator de escala de qualquer objeto de exibição da janela na proporção de 72 pixels para a largura e a altura atuais do palco. Por exemplo, o código a seguir calcula o fator de escala necessário para um objeto de exibição denominado client :

if(newWindow.stage.scaleMode != StageScaleMode.NO_SCALE){ 
client.scaleX = 72/newWindow.stage.stageWidth; 
client.scaleY = 72/newWindow.stage.stageHeight; 
}
Nota: As janelas Flex e HTML definem automaticamente o palco scaleMode como noScale . Alterar o scaleMode perturba os mecanismos automáticos de layout usados nesses tipos de janelas.

Trabalho com o modo de tela cheia

O modo de tela cheia permite que você configure o palco de um filme para preencher todo o monitor do visualizador, sem nenhuma borda ou menu de contêiner. A propriedade displayState da classe Stage é usada para ativar e desativar o modo de tela cheia para um SWF. A propriedade displayState pode ser configurada como um dos valores definidos pelas constantes da classe flash.display.StageDisplayState. Para ativar o modo de tela cheia, defina a propriedade displayState como StageDisplayState.FULL_SCREEN :

stage.displayState = StageDisplayState.FULL_SCREEN; 

Para ativar o modo interativo de tela inteira (novidade no Flash Player 11.3), defina a propriedade displayState como StageDisplayState.FULL_SCREEN_INTERACTIVE :

stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 

No Flash Player, o modo de tela cheia só pode ser iniciado por meio do ActionScript em resposta a um clique do mouse (incluindo o clique com o botão direito) ou pressionamento de tecla. O conteúdo do AIR em execução na caixa de proteção de segurança do aplicativo não requer a ativação do modo de tela cheia em resposta a um gesto do usuário.

Para ativar o modo de tela cheia, defina a propriedade displayState como StageDisplayState.NORMAL .

stage.displayState = StageDisplayState.NORMAL; 

Além disso, o usuário pode optar por sair do modo de tela cheia alternando o foco para outra janela ou usando uma de várias combinações de tecla: a tecla Esc (todas as plataformas), Control-W (Windows), Command-W (Mac) ou Alt-F4 (Windows).

Ativação do modo de tela cheia no Flash Player

Para ativar o modo de tela cheia para um arquivo SWF incorporado a uma página HTML, o código HTML a ser incorporado ao Flash Player deve incluir uma tag param e o atributo embed com o nome allowFullScreen e o valor true , do seguinte modo:

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

Na ferramenta de autoria do Flash, selecione Arquivo -> Configurações de publicação e, na aba HTML da caixa de diálogo Configurações de publicação, selecione o modelo Somente Flash - Permitir tela cheia.

No Flex, verifique se o modelo HTML inclui as tags <object> e <embed> que dão suporte a tela cheia.

Se estiver usando JavaScript em uma página da Web para gerar as tags incorporadas no SWF, altere o JavaScript para adicionar a tag allowFullScreen param e o atributo. Por exemplo, se a página HTML usa a função AC_FL_RunContent() (que é usada pelas páginas HTML geradas pelo Flash Professional e pelo Flash Builder), adicione o parâmetro allowFullScreen a essa chamada de função do seguinte modo:

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

Isso não se aplica aos arquivos SWF em execução no Flash Player autônomo.

Nota: Se você definir o Modo de janela (wmode no HTML) como Opaco sem janela (opaco) ou Transparente sem janela (transparente), a janela da tela cheia será sempre opaca

O uso do modo de tela cheia com o Flash Player em um navegador também apresenta restrições de segurança. Essas restrições estão descritas em Segurança .

Ativação do modo interativo de tela inteira no Flash Player 11.3 e superior

O Flash Player 11.3 e superior suporta o modo interativo de tela inteira, o que permite o suporte integral para todas as teclas do teclado (exceto Esc , que sai do modo interativo de tela inteira). Moto interativo de tela cheia útil para jogos (por exemplo, para permitir o bate papo em um jogo multijogador ou controles de teclado WASD em um jogo de tiro em primeira pessoa).

Para ativar o modo interativo de tela inteira para um arquivo SWF incorporado em uma página HTML, o código HTML para incorporar o Flash Player deve incluir uma marca param e o atributo embed com o nome allowFullScreenInteractive e o valor true da seguinte forma:

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

Na ferramenta de autoria do Flash, selecione Arquivo -> Configurações de publicação e, na aba HTML da caixa de diálogo Configurações de publicação, selecione o modelo Somente Flash - Permitir tela cheia.

No Flash Builder e Flex, verifique se os modelos HTML incluem as marcas de formatação <object> e <embed> que suportam o modo interativo de tela inteira.

Se estiver usando o JavaScript em uma página da Web para gerar as marcas de formatação integradas SWF, você deve alterar o JavaScript para adicionar a marca de formatação e o atributo allowFullScreenInteractive param . Por exemplo, se a página HTML usa a função AC_FL_RunContent() (que é usada em páginas HTML geradas pelo Flash Professional e pelo Flash Builder), você deve adicionar o parâmetro allowFullScreenInteractive para a função de chamada da seguinte forma:

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

Isso não se aplica aos arquivos SWF em execução no Flash Player autônomo.

Tamanho do palco e dimensionamento em tela cheia

As propriedades Stage.fullScreenHeight e Stage.fullScreenWidth retornam a altura e a largura do monitor utilizado quando se passa para o tamanho de tela cheia, caso a entrada nesse estado ocorra imediatamente. Esses valores poderão estar incorretos se o usuário tiver a oportunidade de mudar o navegador de um monitor para outro depois que você recuperá-los, mas antes de entrar no modo de tela cheia. Se você recuperar esses valores no mesmo manipulador de eventos em que definiu a propriedade Stage.displayState como StageDisplayState.FULL_SCREEN , eles estarão corretos. No caso de usuários que têm diversos monitores, o conteúdo SWF se expande para ocupar apenas um monitor. O Flash Player e o AIR usam uma métrica para determinar qual monitor contém a maior parte do SWF e usam esse monitor para o modo de tela cheia. As propriedades fullScreenHeight e fullScreenWidth refletem apenas o tamanho do monitor usado no modo de tela cheia. Para obter mais informações, consulte Stage.fullScreenHeight e Stage.fullScreenWidth em Referência do ActionScript® 3.0 para Adobe® Flash® Platform .

O comportamento de dimensionamento do palco para o modo de tela cheia é igual ao de um modo normal; o dimensionamento é controlado pela propriedade scaleMode da classe Stage. Se a propriedade scaleMode estiver definida como StageScaleMode.NO_SCALE , as propriedades stageWidth e stageHeight da classe Stage serão alteradas para refletir o tamanho da área da tela ocupado pelo SWF (a tela inteira, nesse caso); se for visualizado no navegador, o parâmetro HTML controlará a configuração.

Você pode usar o evento fullScreen da classe Stage para detectar e responder quando o modo de tela cheia está ativado ou desativado. Por exemplo, você talvez queira reposicionar, adicionar ou remover itens da tela ao acessar ou sair do modo de tela cheia, como mostra este exemplo:

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

Como mostra este código, o objeto do evento fullScreen é uma ocorrência da classe flash.events.FullScreenEvent, que inclui uma propriedade fullScreen que indica se o modo de tela cheia está ativado ( true ) ou não ( false ).

Suporte para teclado no modo de tela cheia

Quando o Flash Player é executado em um navegador, todo ActionScript relacionado ao teclado, como eventos de teclado e entrada de texto nas ocorrências de TextField, é desativado no modo de tela cheia. As exceções (as teclas que ficam ativadas) são estas:

  • Teclas selecionadas que não são impressas, especificamente as teclas de seta, a barra de espaço e a tecla Tab

  • Os atalhos de teclado que encerram o modo de tela cheia: Esc (Windows e Mac), Control-W (Windows), Command-W (Mac) e Alt-F4

Essas restrições não se aplicam a conteúdo SWF em execução no Flash Player independente ou no AIR. O AIR dá suporte a um modo de tela cheia interativa que permite entrada do teclado.

Suporte para mouse no modo de tela cheia

Por padrão, os eventos do mouse no modo de tela cheia funcionam da mesma forma dos eventos fora do modo de tela cheia. No entanto, no modo de tela cheia, você pode, como opção, configurar a propriedade Stage.mouseLock para ativar o travamento do mouse. O travamento do mouse desativa o cursor e permite o movimento sem restrições do mouse.

Nota: Você somente pode ativar o travamento do mouse no modo de tela cheia para aplicativos de área de trabalho. Se você configurar em aplicativos que não estejam no modo de tela cheia ou em aplicativos em dispositivos móveis, criará uma exceção.

O bloqueio do mouse é automaticamente desativado e o cursor torna-se visível novamente quando:

  • O usuário sai do modo de tela inteira usando a tecla Esc (todas as plataformas), Ctrl+W (Windows), Comando+W (Mac) ou Alt+F4 (Windows).

  • A janela do aplicativo fica desfocada.

  • Qualquer UI de configuração é visível, incluindo todas as caixas de diálogo de privacidade.

  • Uma caixa de diálogo nativa é mostrada, por exemplo, uma caixa de diálogo de carregamento de arquivo.

Eventos associados a movimentos do mouse, como o evento mouseMove , use a classe MouseEvent para representar o objeto do evento. Quando o travamento do mouse estiver desativado, use as propriedades MouseEvent.localX e MouseEvent.localY para determinar a localização do mouse. Quando o travamento do mouse estiver ativado, use as propriedades MouseEvent.movementX e MouseEvent.movementY para determinar a localização do mouse. As propriedades movementX e movementY contêm alterações na posição do mouse desde o último evento, em vez das coordenadas absolutas da localização do mouse.

Dimensionamento em hardware no modo de tela cheia

Você pode usar a propriedade fullScreenSourceRect da classe Stage para configurar o Flash Player ou o AIR para dimensionar uma região específica do palco no modo de tela cheia. O Flash Player e o AIR fazem dimensionamento em hardware, se possível, usando a placa gráfica e de vídeo do computador de um usuário, e geralmente exibe conteúdo mais rapidamente do que no dimensionamento em software.

Para tirar vantagem do dimensionamento em hardware, defina o palco inteiro ou parte dele para o modo de tela cheia. O código ActionScript 3.0 a seguir define o palco inteiro para o modo de tela cheia:

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

Quando essa propriedade é definida como um retângulo válido e a propriedade displayState é definida como o modo de tela cheia o Flash Player e o AIR dimensionam a área especificada. O tamanho real do Palco em pixels no ActionScript não é alterado. O Flash Player e o AIR forçam um limite mínimo para o tamanho do retângulo de forma a acomodar a mensagem padrão "Pressione Esc para sair do modo de tela cheia". Em geral, esse limite está em torno de 260 por 30 pixels, mas pode variar de acordo com a plataforma e a versão do Flash Player.

A propriedade fullScreenSourceRect só pode ser definida quando o Flash Player ou AIR não está no modo de tela cheia. Para usar esta propriedade corretamente, defina-a primeiro e, em seguida, defina a propriedade displayState para o modo de tela cheia.

Para ativar o dimensionamento, defina a propriedade fullScreenSourceRect como um objeto de retângulo.

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

Para desativar o dimensionamento, defina a propriedade fullScreenSourceRect como null .

stage.fullScreenSourceRect = null;

Para aproveitar todos os recursos de aceleração de hardware com o Flash Player, ative-a na caixa de diálogo Configurações do Flash Player. Para carregar a caixa de diálogo, clique com o botão direito do mouse (Windows) ou clique mantendo a tecla Control pressionada (Mac) dentro do conteúdo Flash Player exibido no navegador. Selecione a aba Exibir, que é a primeira, e clique na caixa de seleção: Habilitar aceleração de hardware.

Modos de janela direto e de composição GPU

O Flash Player 10 introduz dois modos de janela (direto e composição GPU) que você pode ativar através das configurações de publicação da ferramenta de autoria do Flash. Esses modos não são suportados no AIR. Para aproveitar as vantagens desses modos, você deve ativar a aceleração de hardware para o Flash Player.

O modo direto usa o caminho mais rápido e direto para enviar gráficos para a tela, o que é vantajoso para a reprodução de vídeos.

A Composição GPU usa a unidade de processamento gráfico da placa de vídeo para acelerar a composição. A composição de vídeo é o processo de dispor várias imagens em camadas para criar uma única imagem de vídeo. Quando a composição é acelerada com a GPU, ela pode melhorar o desempenho de conversão YUV, correção de cores, rotação ou dimensionamento e mesclagem. Conversão YUV refere-se à conversão de cores de sinais analógicos compostos, que são usados para transmissão, no modelo de cores RGB (vermelho, verde, azul) usado por monitores e câmeras de vídeo. O uso da GPU para acelerar a composição reduz as demandas de memória e de computação que, de outro modo, seriam atribuídas à CPU. Ele também resulta em uma reprodução mais contínua para vídeo com definição padrão.

Seja cauteloso na implementação desses modos de janela. O uso da composição GPU pode ser dispendioso para a memória e os recursos da CPU. Se não for possível executar algumas operações (como modos de mesclagem, filtragem, corte ou mascaramento) na GPU, elas serão feitas pelo software. A Adobe recomenda que você se restrinja a um arquivo SWF por página HTML quando usar esses modos e que não ative esses modos para banners. O recurso Testar filme do Flash não utiliza aceleração de hardware, mas você pode usá-la através da opção Publicar visualização.

É inútil configurar uma taxa de quadros superior a 60 no arquivo SWF, que é a taxa máxima de atualização da tela. Configurar a taxa de quadros com um valor entre 50 e 55 viabiliza quadros descartados, que podem ocorrer por vários motivos de tempos em tempos.

O uso do modo direto exige o Microsoft DirectX 9 com 128 MB de VRAM no Windows e OpenGL para Apple Macintosh, Mac OS X v10.2 ou superior. A composição GPU exige o Microsoft DirectX 9 e suporte para Pixel Shader 2.0 no Windows com 128 MB de VRAM. No Mac OS X e no Linux, a composição GPU exige o OpenGL 1.5 e várias extensões OpenGL (objeto framebuffer, multitextura, objetos Shader, linguagem de sombreamento, sombreador de fragmentos).

É possível ativar os modos de aceleração direto e gpu por arquivo SWF na caixa de diálogo Configurações de publicação do Flash usando o menu Aceleração de hardware da aba Flash. Se você clicar em Nenhum, o modo de janela voltará para padrão , transparente ou opaco , conforme especificado pela configuração Modo de janela na aba HTML.