Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Eder Fortunato

Actionscript 3.0

Recommended Posts

Carregando um arquivo XML

 

Para carregamento de XML, é preciso usar 2 classes, a URLLoader para carregar o arquivo e a XML para manipula-lo, na XML aconteceram algumas modificações, no modo de acessar os nós, agora é preciso utilizar o nome de cada nó, e não mais childNodes, a propriedade ignoreWhite(que agora é ignoreWhitespace), já vem por default habilitada (e já não era hora)

 

 

//cria o objeto com o endereço(URL) a ser carregadovar endereco:URLRequest = new URLRequest("agenda.xml")//cria o objeto que carregarávar loader:URLLoader = new URLLoader();function onComplete(event:Event) {    var agenda = new XML(event.target.data);    var total = agenda.pessoa.length();    for (var i = 0; i < total; i++) {        //os atributos dos nós são acessado com um "@" antes no nome        trace('cod: '  + agenda.pessoa[i].@cod);        //os valores do nós são acessado pelo próprio nome        trace('nome: ' + agenda.pessoa.nome[i]);        trace('fone: ' + agenda.pessoa.telefone[i]);        trace('---------------------');    }}//adiciona a função ao Listenerloader.addEventListener(Event.COMPLETE, onComplete);//carrega o arquivo xmlloader.load(endereco);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando o Laço for...in

 

Além do for...in agora existe uma nova forma de listar os dados de um array, é usando o for each, gostei muito desse comando, veja:

 

var itens:Array = new Array();itens[0] = 1;itens[1] = 2;itens[2] = 3;for each (var item:Object in itens){    trace(item);}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando FlashVars

 

 

no HTML não mudou nada, você só precisa passar as variaveis como se fosse uma url

 

<PARAM NAME=movie VALUE="teste.swf?nome=maria&idade=25">

 

e na tag embed

 

<EMBED SRC="teste.swf?nome=maria&idade=25" .......>

 

agora dentro do flash

 

//pega os dados que foram passadosvar paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;//instancia uma caixa de textovar caixa=new TextField()caixa.width = 500//pega os valors e insere na caixa de texto  caixa.text  = "nome: "    + paramObj.nomecaixa.text  += ", idade: " +  paramObj.idade//adiciona a caixa de texto no palcoaddChild(caixa);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desenhando com action script 3

 

 

A API usada para desenhar no flash ganhou algumas funções para facilitar a nossa vida, não temos mais que usar fórmulas e mais formulas para desenhar um círculo ou um quadrado com cantos arredondados, basta uma linha e pronto.

 

Um outro detalhe usado no código abaixo é a classe Sprite, pense nela como um movieClip usado apenas como contêiner para outros movieClips e objetos na tela, ela possui bem menos funções que a classe movieCLip, mas em compensação é mais leve, é perfeita para criar os desenhos dinamicos como no exemplo abaixo

 

 

var formas:Sprite = new Sprite();formas.graphics.beginFill(0x339999);// desenha um quadrado// os paramentros são:// drawRect(posição X, posição Y, largurar, altura)formas.graphics.drawRect(10, 100, 100, 50);// desenha um quadrado com cantos arredondados// os paramentros são:// drawRoundRect(posição X, posição Y, largurar, altura,  arredondamento na largura, arredondamento na altura)formas.graphics.drawRoundRect(150, 100, 100, 50, 20, 20);// desenha um circulo// os paramentros são:// drawCircle(posição X, posição Y, raio do circulo)formas.graphics.drawCircle(300, 125, 25)// desenha uma elipse// os paramentros são:// drawEllipse(posição X, posição Y, largurar, altura)formas.graphics.drawEllipse(350, 100, 100, 50)formas.graphics.endFill();addChild(formas);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criando um Preloader simples

 

 

Agora existe uma classe específica para carregar arquivos .SWF, .JPG, .PNG ou .GIF (de adeus a MovieClipLoader)

Nesse exemplo estou carregando dentro de um movieClip chamado holder_mc

 

 

//cria o objeto com o endereço(URL) a ser carregadovar endereco:URLRequest = new URLRequest("filme.swf");//cria o objeto que carregarávar carregador:Loader = new Loader();//função a ser executada enquado carrega a swffunction onProgress(event:ProgressEvent):void {    var percentagem:Number = event.bytesLoaded / event.bytesTotal;    percentagem = Math.round( percentagem * 100);    trace("Carregamento em: " + percentagem + "%");}//função a ser executada no final do arregamentofunction onComplete(event:Event):void {    //muda a posição do swf carregado    var mc = event.target.content    mc.x = 100    mc.y = 100    trace("carregou")}//adiciona os ouvintes ao objeto carregadorcarregador.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);carregador.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);// inicia o carregamentocarregador.load(endereco);//adiciona o swf carregado no movieClip que ja está no palcoholder_mc.addChild(carregador);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eduardo, estou com problemas para DESABILITAR o botão, tentei seguir a simples lógica do enabled, mas não adiantou, ele remove o cursor do botão, mas ele continua sendo clicável e executa o método setado pelo addEventListener!

 

tem agluma idéia do que pode ser feito?

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

COmo fazer duplicateMovieClip();

?????

eh o mesmo jeito do As2 ?

help plz

:grin:

cara.... diz que essa função foi removida Imagem Postada

deve ter algum jeito de contornar mas agora eu to com sono rs

Mas foi uma boa pergunta a sua! Volto a analizar isso amanhã

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

COmo fazer duplicateMovieClip();

?????

eh o mesmo jeito do As2 ?

help plz

:grin:

cara.... diz que essa função foi removida Imagem Postada

deve ter algum jeito de contornar mas agora eu to com sono rs

Mas foi uma boa pergunta a sua! Volto a analizar isso amanhã

 

 

 

seguinte cara... você vai ter q fazer assim...

primeiro você vai lah na biblioteca, clica com o bt direito no movieclip q vai ser duplicado, seleciona Linkage / Export for ActionScript, e define uma classe pra ele, mcTeste por exemplo...

 

ai no actionScript você faz assim...

 

//cria um objeto _Class pra receber a classe mcTestevar _Class:Object = getDefinitionByName("mcTeste") as Class;//cria um movieclip (sua nova instancia do movieclip original)var mc:MovieClip = new _Class();//e manda ele pro seu stage =]addChild (mc);
prontinho, tah feito!

espero ter ajudado!

abraços

 

 

---edit---

 

axei uma função pronta interessante, que um tal de senocular fez, de repente.. se te interessar..

 

 

 

package com.senocular.display {       import flash.display.DisplayObject;    import flash.geom.Rectangle;       /**     * duplicateDisplayObject     * creates a duplicate of the DisplayObject passed.     * similar to duplicateMovieClip in AVM1     * @param target the display object to duplicate     * @param autoAdd if true, adds the duplicate to the display list     * in which target was located     * @return a duplicate instance of target     */    public function duplicateDisplayObject(target:DisplayObject, autoAdd:Boolean = false):DisplayObject {        // create duplicate        var targetClass:Class = Object(target).constructor;        var duplicate:DisplayObject = new targetClass();               // duplicate properties        duplicate.transform = target.transform;        duplicate.filters = target.filters;        duplicate.cacheAsBitmap = target.cacheAsBitmap;        duplicate.opaqueBackground = target.opaqueBackground;        if (target.scale9Grid) {            var rect:Rectangle = target.scale9Grid;            // Flash 9 bug where returned scale9Grid is 20x larger than assigned            rect.x /= 20, rect.y /= 20, rect.width /= 20, rect.height /= 20;            duplicate.scale9Grid = rect;        }               // add to target parent's display list        // if autoAdd was provided as true        if (autoAdd && target.parent) {            target.parent.addChild(duplicate);        }        return duplicate;    }}

e depois para utilizá-la basta fazer assim:

 

 

 

import com.senocular.display.duplicateDisplayObject;// create duplicate and assign to newInstance variable// using true for autoAdd automatically adds the newInstance// into the display list where myOldSprite is locatedvar newInstance:Sprite = duplicateDisplayObject(myOldSprite, true);newInstance.x += 100; // shift to see duplicate
e vualá

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parabéns Eder !

 

Estou meio afastado do flash e já não mexia em tantas coisas, maioria comandos básicos e baixei o cs3 e virei um "ingnorante", mas você deu uma luz do caraças...agradeço!

 

t+

Vlad

Compartilhar este post


Link para o post
Compartilhar em outros sites

O substituto do '_root.gotoAndStop(1);'

 

Com ActionScript 2.0, se você quisesse colocar um botão DENTRO de um Movie Clip e que a ação desse botão fosse comandar a timeline da Cena principal (e não a timeline do próprio Movie Clip), você fazia algo do tipo:

 

_root.gotoAndStop(1);
Agora, com ActionScript 3.0, isso não funciona mais. Precisei invocar um santo muito forte (São Google) pra achar a solução, e encontrar uma coisa bem específica assim pode ser bem chato e demorado. Mas encontrei (e foi no cache do Google do experts-exchange.com):

 

MovieClip(root).gotoAndStop(1);
ou

 

MovieClip(parent).gotoAndStop(1);
Acho que isso será de ajuda pra mais pessoas, por isso me registrei aqui e postei isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom o material Elder. Agora estou me dedicando totalmente a criar aplicativos com Adobe AIR, pois acho muito interessante além de ser em AS3 claro!

 

Bom, obrigado por compartilhar esse material, creio que para o pessoal que está inciando é muito importante saber dessas coisas básicas ai!

 

Abraços.

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, parabéns pelo tópico... e um pouco da minha contrubuição:

 

Anteriormente, no AS2, se usava como máscara dinâmica os comandos abaixo

 

mc_principal.setMask(mascara)

 

sendo que o mc_principal era o movieclip mascarado, e o mascara, obviamente, a máscara.

 

Agora no AS3 ficou mais fácil

mascara.mask = mc_principal

 

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Tou com um prob meiu chatim!!!

 

eu to fazendo um site pequeno em flash, ai eu tenho os botões que carregam um SWF externo e solta na tela certo??? usando o addchild();

 

solta direto na tela...

 

ai!!!

no Swf que ele abre, tem um botão pra fechar so que ele não quer fazer o que eu quero que faça

 

Eu ja tentei o removechild(); mas não funciona!!!!!!

 

Como devo fazer galera???

 

Tentei assim:

 

function onClick(event:MouseEvent):void {

trace("fechar");removeChild(carregador);}

fechar.addEventListener("click", onClick);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Tou com um prob meiu chatim!!!

 

eu to fazendo um site pequeno em flash, ai eu tenho os botões que carregam um SWF externo e solta na tela certo??? usando o addchild();

 

solta direto na tela...

 

ai!!!

no Swf que ele abre, tem um botão pra fechar so que ele não quer fazer o que eu quero que faça

 

Eu ja tentei o removechild(); mas não funciona!!!!!!

 

Como devo fazer galera???

 

Tentei assim:

 

function onclick(event:MouseEvent):void {

trace("fechar");removeChild(carregador);}

fechar.addEventListener("click", onclick);

 

 

 

Oi pessoal sou novo aqui como membro, mas antigo como leitor, eu vi que um amigo acima fez o cadastro so para ajudar quem tem problemas, e eu passei pelo mesmo problema que muita gente com um site em flash, eu fiz o botao e ele nao abria a aba action para o botao, so para o frame inteiro, entao fui pesquisar e vi muitas respostas nao consegui fazer nenhuma ate que pensei um pouco e fiz uma adaptaçao em um codigo de flashlightbox no botao e deu certo espero que alguem que esta com o mesmo problema que eu resolva agora, tentei explicar um pouco o codigo espero que ajude.

 

 

//LINKANDO BOTOES COM FRAMES SIMPLES E OBJETIVO
//Abaixo iremos fazer um Event Listener para linkar os botoes
bt1.addEventListener(MouseEvent.CLICK, btPress);
bt2.addEventListener(MouseEvent.CLICK, btPress);
bt3.addEventListener(MouseEvent.CLICK, btPress);
bt4.addEventListener(MouseEvent.CLICK, btPress);
bt5.addEventListener(MouseEvent.CLICK, btPress);
bt6.addEventListener(MouseEvent.CLICK, btPress); 
//Aqui estamos fazendo a função que o botao tera
function btPress(event:MouseEvent):void {
//Se o botao clicado for o bt1 entao ele vai para o frame 2 e para e assim sucessivamente
//Aqui se usa o gotoAndStop para nao clicar novamente no botao e ir para o proximo frame
//Faça o teste com gotoAndPlay e veja o que ira acontecer
 if (event.target.name == "bt1") {
 gotoAndStop(2);
 } else if (event.target.name == "bt2") {
 gotoAndStop(3);
 } else if (event.target.name == "bt3") {
 gotoAndStop(4);
 } else if (event.target.name == "bt4") {
 gotoAndStop(5);
 } else if (event.target.name == "bt5") {
 gotoAndStop(6);
 } else if (event.target.name == "bt6") {
 gotoAndStop(7);
 }
}

 

Abraço a todos que disponibilzam tempo para ajudar o próximo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa... pensei que sabia o bastante... mas me impressionei com esse post, muito bom.

 

Parabéns cara...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.