Olá, e como quase adoradores do Flash – e estudantes do AS3 – vamos falar um pouco do Resize do stage, ações quando o palco for dimensionado. Para fazer com que o Flash identifique o aumento ou diminuição do palco e execute uma determinada função deve-se criar o addEventListener abaixo:

stage.addEventListener(Event.RESIZE, resizeMe);

Assim podemos criar a função resizeMe que fara todas as mudanças de posição do palco a cada vez que ele identifique o resize. Para tanto a função deve receber o argumento event:Event para que seja executada pelo addEventListener, só que ai encontramos um pequeno problema: toda vez que o flash for carregado ele deve executar a função ao carregar e depois executar a cada resize para que nao carregue na posição errada e so seja corrigido as posições ao aumentar ou diminuir o palco.

Uma função ao ser chamada sem nenhum, com o event:Event, ela precisa enviar um arqumento do tipo Event o que não acontece quando executamos a função simplismente chamando-a pelo nome(), assim, um pequeno gato (heheh) criamos uma função sem o event normalmente:

function resizeAll():void
{
	// code goes here
};

essa poderá ser chamada pelo nome sem argumento no carregamento do frame normalmente:

resizeAll();

e ainda, completando cria-se uma função complementar, com o argumento event:Event onde será chamada pelo Listener do stage, dentro dessa função ela pede somente para executar a função resizeAll() normalmente, assim mesmo na inicialização ou no event.RESIZE será executada a mesma função, como segue no codigo completo abaixo:

stage.addEventListener(Event.RESIZE, resizeMe);
function resizeMe(event:Event):void { resizeAll(); };
function resizeAll():void
{
	objeto.x = stageWidth - objeto.with;
	objeto.y = stageHeight - objeto.height;
};
resizeAll();

Assim podemos posicionar objetos de acordo com os resize e ainda sempre que excutada a função podemos recuperar a largura e altura do stage usando a variável stageWidth e stageHeight, pegando o novo valor, ou seja da janela ampliada ou reduzida.

Espero que tenha ajudado, qualquer dúvida: comment me x)

Related Posts

13 Responses to “Resize stage: stageWidth and stageHeight”

  1. Dieggo Says:

    Muito bom muito bom mesmo!
    Me ajudou bastante!!!

    DEus te abençoe!!!

  2. Pablo Davi Says:

    Obrigado voce, qualquer duvida so comentar.
    At XD

  3. Geraldo Says:

    Pablo, eu simplesmente colo a action e mando exportar num novo documento, e de cara já dá um erro!
    Tem algo errado véi…

  4. Pablo Davi Says:

    @Geraldo: se for utilizar o codigo no document class voce precisa fazer algo parecido com o codigo abaixo:

    1
    2
    3
    4
    5
    
    private function resizeAll(e:Event):void
    {
    	newBall.x = stage.stageWidth/2;
    	newBall.y = stage.stageHeight/2;
    }

    Precisa por stage. antes do stageWidth para reconhecer o tamanho do palco. Qualquer duvida so falar.

  5. Clarisse Says:

    em que ordem coloco esse código aé pra dar certo já tentei vários e nenhum está funcionando para redimensionar o site .

  6. Pablo Davi Says:

    Ola Clarisse, eu utilizo o evento de resize em muitos projetos e sempre da certo, se voce estiver utlizando ele dentro de uma class precisa importar o Event para conseguir rodar normalmente. Se tiver alguma duvida por favor coloque aqui a parte do seu codigo que posso ajudar a resolver o seu problema. Grande abraço

  7. Sérgio Bertini Says:

    Posso fazer isso com vários objetos, dando instâncias para eles e relatando eles nesse código, da seguinte maneira???

    stage.addEventListener(Event.RESIZE, resizeMe);
    function resizeMe(event:Event):void { resizeAll(); };
    function resizeAll():void
    {
    objeto1.x = stage.stageWidth – objeto.with;
    objeto1.y = stage.stageHeight – objeto.height;
    };

    {
    objeto2.x = stage.stageWidth – objeto.with;
    objeto2.y = stage.stageHeight – objeto.height;
    };

    {
    objeto3.x = stage.stageWidth – objeto.with;
    objeto3.y = stage.stageHeight – objeto.height;
    };
    resizeAll();

    Num palco onde temos vários objetos que precisam ser redimensionados, posso fazer assim???? Ou basta cada objeto meu no palco ser um moveclipe que esse código faz automaticamente????

  8. Pablo Davi Says:

    Oi Sergio Bertini, você pode fazer tudo dentro de uma função so, dentro de um { } so, se fizer como voce deixou ai no exemplo nao vai funcionar. Tenta:

    1
    2
    3
    4
    5
    6
    7
    8
    
    stage.addEventListener(Event.RESIZE, resizeWindow);
    stage.dispatchEvent(new Event(Event.RESIZE));
    private function resizeWindow(e:Event):void
    {
         obj01.x ......
         obj02.x ......
         obj03.x ......
    }

    O ‘dispatchEvent’ vai fazer o Flash chamar o evento de Resize uma vez mesmo que não haja resize, depois so com o movimento do Browser, ai so vc colocar dentro da funcao tudo que vc quer que mexa.
    : ) Qualquer coisa estamos ai.

  9. Flimadias Says:

    Era mais facil assim

    stage.addEventListener(Event.RESIZE, resizeMe);
    function resizeMe(ev:Event = null):void
    {
    objeto.x = stageWidth – objeto.with;
    objeto.y = stageHeight – objeto.height;
    };
    resizeMe();

  10. Pablo Davi Says:

    Thanks @flimadias (:

  11. Alex Says:

    cara não consegui fazer esta action, desculpe em pedi para ser mais espscifico. coloco uma ação em cada layer.

  12. Alex Says:

    cara não consegui fazer esta action, desculpe em pedi para ser mais espscifico. coloco uma ação em cada layer.
    ou tenho que especificar cada objeto.

  13. Pablo Davi Says:

    @Alex, sim. Dentro da sua função do Listener Resize voce tem que especificar todas as mudanças que você quer que aconteça para cada objeto a cada vez que o palco tiver seu tamanho alterado seja na largura ou altura.

    function ResizeStage(e:Event = null) {
         obj1.x = stage.stageWidth - obj1.width;
         obj2.x = ( stage.stageWidth - obj2.width ) * 0.5;
    }

Leave a Reply