Campão 0 Denunciar post Postado Novembro 26, 2009 E ai galera, estou migrando de AS2 para AS3 e estou com umas duvidas, e não consigo achar algo para me ajudar, sera que vcs poderiam!?!? Tenho um menu e quero que ao passar o mouse sobre os botões do menu, um certo MC rotacione, so que para cada botão, vai ser rotacionado um certo MC ai eu fiz o seguinte: //IMPORTs import flash.events.MouseEvent; import fl.transitions.Tween; import fl.transitions.TweenEvent; import fl.transitions.easing.*; //DECLARAÇÕES var rotacaoBotao:Tween; //FUNÇÕES function giraVaiBotao(obj:MovieClip):void { rotacaoBotao = new Tween(obj.botao, "rotation", Regular.easeIn, -170, 130, .5, true); } function giraVoltaBotao(obj:MovieClip):void { rotacaoBotao = new Tween(obj.botao, "rotation", Regular.easeIn, 130, -170, .5, true); } //EVENTOS btn1.addEventListener(MouseEvent.ROLL_OVER, function(){ giraVaiBotao(volume1); } ) btn1.addEventListener(MouseEvent.ROLL_OUT, function (){ giraVoltaBotao(volume1); } ) So que para cada botão eu preciso fazer um codigo como esse parte "EVENTOS" No AS2 eu conseguia fazer um "for" para atribuir funções aos botões, renomeando os botões de forma ["btb" + i] Porem não consigo achar algo parecido com isso no AS3 Alguem poderia me ajudar Compartilhar este post Link para o post Compartilhar em outros sites
linoart 0 Denunciar post Postado Novembro 29, 2009 Campão, pelo que entendi você já tem os botões criados instanciados como btn1, btn2... e o movieclip que eles devem rotacionar está instanciado como volume1, volume2... é isso mesmo? Bom, se for isso mesmo você cria um mesmo listener para cada botão alterando a instancia de cada um mas sem mandar o movieclip como parametro: btn1.addEventListener(MouseEvent.ROLL_OVER,giraVaiBotao) btn2.addEventListener(MouseEvent.ROLL_OVER,giraVaiBotao) Na função você coloca o evento que está usando e usa if para saber qual é o botão que disparou a função: function giraVaiBotao(evt:MouseEvent):void { if(evt.target == btn1) { rotacaoBotao = new Tween(volume1, "rotation", Regular.easeIn, -170, 130, .5, true); } if(evt.target == btn2) { rotacaoBotao = new Tween(volume2, "rotation", Regular.easeIn, -170, 130, .5, true); } } } Abraços, Compartilhar este post Link para o post Compartilhar em outros sites
Michel Araújo 0 Denunciar post Postado Novembro 29, 2009 você pode fazer uma referencia dinâmica à uma variável em AS3 sim, mas precisa usar a estrutura: Objeto['variavel'] no seu caso você pode fazer assim: for(var i:uint; i<=nroUltimoBotao;i++){ this['btn'+i].addEventListener(MouseEvent.MOUSE_OVER,funcaoOver); this['btn'+i].addEventListener(MouseEvent.MOUSE_OUT,funcaoOut); } Só lembrando que da forma que coloquei o i começa do 0. Aí o 'problema' maior creio que seja pra definir, dentro das funções que serão chamadas, qual MovieClip irá sofrer a animação. Você pode usar a forma aí de cima, com if's ou com um switch verificando o currentTarget do evento passado como parametro. Você também poderia usar a mesma estrutura do this['volume'+i] dentro da função, mas nesse caso você precisaria ter o valor isolado do i, que pode ser obtido usando expressões regulares, ou de uma forma mais interessante, criando um evento personalizado com um atributo 'i'. Compartilhar este post Link para o post Compartilhar em outros sites
Campão 0 Denunciar post Postado Novembro 30, 2009 Você também poderia usar a mesma estrutura do this['volume'+i] dentro da função, mas nesse caso você precisaria ter o valor isolado do i, que pode ser obtido usando expressões regulares, ou de uma forma mais interessante, criando um evento personalizado com um atributo 'i'. Valew Michel, era isso mesmo, so que nao entendi como seria essa ultima parte da sua resposta poderia me dar um exemplo por favor?? Compartilhar este post Link para o post Compartilhar em outros sites
Campão 0 Denunciar post Postado Novembro 30, 2009 Campão, pelo que entendi você já tem os botões criados instanciados como btn1, btn2... e o movieclip que eles devem rotacionar está instanciado como volume1, volume2... é isso mesmo? Bom, se for isso mesmo você cria um mesmo listener para cada botão alterando a instancia de cada um mas sem mandar o movieclip como parametro: btn1.addEventListener(MouseEvent.ROLL_OVER,giraVaiBotao) btn2.addEventListener(MouseEvent.ROLL_OVER,giraVaiBotao) Na função você coloca o evento que está usando e usa if para saber qual é o botão que disparou a função: function giraVaiBotao(evt:MouseEvent):void { if(evt.target == btn1) { rotacaoBotao = new Tween(volume1, "rotation", Regular.easeIn, -170, 130, .5, true); } if(evt.target == btn2) { rotacaoBotao = new Tween(volume2, "rotation", Regular.easeIn, -170, 130, .5, true); } } } Abraços, Valew linoart, mas era mais ou menos o que o Michel abaixo falou, de qq forma valew, pois sou novo no AS3 e qq script para eu estudar ja é valido obrigado pela atenção! Compartilhar este post Link para o post Compartilhar em outros sites
Campão 0 Denunciar post Postado Novembro 30, 2009 valew galera, consegui import flash.events.MouseEvent; import fl.transitions.Tween; import fl.transitions.TweenEvent; import fl.transitions.easing.*; var rotacaoBotao:Tween; for(var i:uint; i<=9;i++){ this['btn'+i].addEventListener(MouseEvent.MOUSE_OVER,funcaoOver); this['btn'+i].addEventListener(MouseEvent.MOUSE_OUT,funcaoOut); } function funcaoOver(e:Event):void{ var strNumero:String = new String(e.target.name.substr(3)); var obj:MovieClip; obj = this['volume'+ strNumero].botao; rotacaoBotao = new Tween(obj, "rotation", Regular.easeIn, -170, 130, .5, true); } function funcaoOut(e:Event):void{ var strNumero:String = new String(e.target.name.substr(3)); var obj:MovieClip; obj = this['volume'+ strNumero].botao; rotacaoBotao = new Tween(obj, "rotation", Regular.easeIn, 130, -170, .5, true); } Compartilhar este post Link para o post Compartilhar em outros sites