ERON 0 Denunciar post Postado Janeiro 25, 2012 Olá pessoal, vamos ao meu probleminha rsrs Eu tenho o Scene 1 (stage principal), e dentro dele tenho uma camada chamada "Menu", a qual, no primeiro frame desta tem um MovieClip instaciado como 'menu' também... Dentro desse movieclip 'menu', em uma de suas camadas, há um movieclip instaciado como 'btnHome', com dois frames na sua layer única. O que eu quero é que quando a pessoa passe o mouse sobre esse MovieClip instaciado como 'btnHome', dentro do Movieclip 'menu' que está no stage principal, ele mande um gotoandStop na layer 2 do movieclip 'btnHome'. O código que eu coloquei pra isso é o seguinte, e se encontra no primeiro frame de uma camada chamada 'actions' no Scene 1 (vou criar um array com todos os nomes dos meus botoes do Menu pra ficar mais fácil e mais compacto o código, utilizando "for"): var btnsMenu:Array = new Array("btnHome"); for (var i:int = 0; i < btnsMenu.length; i++) { menu.btnsMenu[i].buttonMode = true; menu.btnsMenu[i].addEventListener(MouseEvent.MOUSE_OVER, OVER_btnsMenu[i]); function OVER_btnsMenu[i](e:MouseEvent):void { // ------- LINHA 31 AQUI ----------- trace("ENTROU"); menu.btnsMenu[i].gotoAndStop(2); } } Aqui, da um erro de compilação: Scene 1, Layer 'actions', Frame 1, Line 31 1084: Syntax error: expecting leftparen before leftbracket. (A linha 31 está marcada no código) E nenhum erro no "output". Também tentei colocar esta action dentro do movieclip 'menu', em uma camada separada, no primeiro frame, colocando a "function" fora do "for" pra ver no que dava, fazendo da seguinte forma: import flash.events.MouseEvent; var btnsMenu:Array = new Array("btnHome"); for (var i:int = 0; i < btnsMenu.length; i++) { btnsMenu[i].buttonMode = true; btnsMenu[i].addEventListener(MouseEvent.CLICK, OVER_btnsMenu[i]); } function OVER_btnHome(e:MouseEvent):void { trace("ENTROU"); btnHome.gotoAndStop(2); } O erro de compilação que dá aqui é: Symbol 'menu', Layer 'actions', Frame 1, Line 7 1120: Access of undefined property OVER_btnsMenu. E erro na aba 'Output' é: ReferenceError: Error #1065: Variable TCMText is not defined. Quando da esses erros, o botão "Home" (btnHome) fica no palco, mas mesmo com meu stop(); na primeira frame ele fica dando play e loop sem parar. E fuçando no código consegui rodar sem erros (tanto de compilação quanto de output), mas aí o botão não aparece no stage (ou seja, o movieclip instaciado 'menu' simplesmente nao aparece no stage), não sei o que acontece. Help aee por favor galera! rsrs nao sei mais o que fazer.. abraços. Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Janeiro 25, 2012 Tem como fazer parecido com o as2. import flash.events.MouseEvent ; fdfd.addEventListener(MouseEvent.CLICK , function (e:MouseEvent){gfgffg(e,5);}); function gfgffg(e:MouseEvent , n:Number){ trace(n); } No segundo parametro se poe uma funcao, assim como pode definir uma funcao que nem no gfgffg da para colocar uma nos parametros de uma funcao. Compartilhar este post Link para o post Compartilhar em outros sites
ERON 0 Denunciar post Postado Janeiro 25, 2012 Valeu pela dica amigo, mas no caso estou utilizando o AS3 mesmo.. e como eu disse, até onde sei o meu código está certo.. através do event listener ele chama a função.. acontece que eu acho que minha manipulação do array deve estar errada.. Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Janeiro 25, 2012 Valeu pela dica amigo, mas no caso estou utilizando o AS3 mesmo.. e como eu disse, até onde sei o meu código está certo.. através do event listener ele chama a função.. acontece que eu acho que minha manipulação do array deve estar errada.. Eu disse parecido com as2, mas é as3. Eu vi que voce estava tentando passar um parametro(a variavel i) para essa funcao Ai postei um exemplo. AS2 nem tem addEventListener, acho que é on(click), nem me lembro Compartilhar este post Link para o post Compartilhar em outros sites
ERON 0 Denunciar post Postado Janeiro 25, 2012 Haha achei estranho mesmo.. foi o que eu percebi, não me lembro de addEventListener em AS2 (Um bilhao de anos sem usar kkk) Agora entendi.. tipo eu poderia passar o parametro btnsMenu:i né... Aí ficaria algo assim: var btnsMenu:Array = new Array("btnHome"); for (var i:int = 0; i < btnsMenu.length; i++) { menu.btnsMenu[i].buttonMode = true; menu.btnsMenu[i].addEventListener(MouseEvent.MOUSE_OVER, function (e:MouseEvent){OVER_btnsMenu[i](e,i);}); } function OVER_btnHome(e:MouseEvent, n:Number):void { trace("ENTROU"); menu.btnHome.gotoAndStop(2); } E assim sucessivamente, para uma função pra cada botão, é isso ? Outra coisa, com esse esquema de passar um número como parâmetro da função também, tem como eu ir para um determinado lugar dentro da função? Porque por exemplo, sei que quando i=1, é o btnHome, quando i=2, é o btnContato, e assim por diante, aí dentro da função ficaria: function OVER_btns(e:MouseEvent, n:Number):void { se 1: menu.btnHome.gotoAndStop(2); se 2: menu.btnContato.gotoAndStop(2); } Sei que com um "IF" ali daria certo, mas aí a máquina teria que verificar todos os "if's" da função, ou até entrar no correto, o que usa maior processamento.. então queria saber se tem como fazer tipo um 'switch()' do C++, onde ele da um "scan" na variável, e ja ve se ela é 1, 2, 3, 4, etc... Valeu pela ajuda, vou testando aqui. Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Janeiro 25, 2012 AS3 tambem tem swith switch(condicao){ case x: trace(x); break; case y: trace(y); break; default: trace(0); break; } Compartilhar este post Link para o post Compartilhar em outros sites
ERON 0 Denunciar post Postado Janeiro 25, 2012 Beleza, lá vamos nós denovo... Tentei o código da seguinte maneira: var btnsMenu:Array = new Array("btnHome","btnContato"); for (var i:int = 0; i < btnsMenu.length; i++) { menu.btnsMenu[i].addEventListener(MouseEvent.MOUSE_OVER, function (e:MouseEvent){OVER_btns(e,i);}); } function OVER_btns(e:MouseEvent, n:Number):void { switch(n) { case 1: trace("ENTROU 1"); menu.btnHome.gotoAndStop(2); break; case 2: trace ("ENTROU 2"); menu.btnContato.gotoAndStop(2); break; } } Quando dou CTRL+ENTER, nada aparece na aba "Compile Errors", mas já na "Output" aparece isso: TypeError: Error #1010: A term is undefined and has no properties. at main_fla::MainTimeline/frame1() Acredito que o erro esteja aqui: menu.btnsMenu[i].addEventListener(MouseEvent.MOUSE_OVER, function (e:MouseEvent){OVER_btns(e,1);}); Ele não deve estar conseguindo ler que menu.btnsMenu, seria por exemplo, menu.btnHome ... acho que é isso Alguem tem uma luz ? Obrigado. ----------------------------------------------------------- Andei pesquisando e resolvi fazer de uma outra forma (e mais coerente eu acredito), que é a seguinte: //Na minha biblioteca, os botoes estão em movieclips como btn1, btn2, btn3, etc.. var btnsMenu:Array = new Array("btn2","btn2"); var Y:int = -71; for (var i:int = 0; i < btnsMenu.length; i++) { var mc:btnsMenu[0] = new btnsMenu[0](); // LINHA 29 mc.x = 1; mc.y = Y; Y = Y + 65; menu.addChild(mc); } menu.addEventListener(MouseEvent.MOUSE_OVER, OVER_btns) function OVER_btns(e:MouseEvent):void { e.target.gotoAndStop(2); } Sendo que neste caso, através das propriedades do MC na Library, criei uma classe chamada btn1 (AS Linkage), btn2, e assim sucessivamente, por isso daria certo adicionar a variavel mc:btn1 = new btn1(); , tanto que testei em um .fla novo e deu certo... mas nesse caso, por estar como btnsMenu, da o seguinte erro na aba "Compile Error": Scene 1, Layer 'actions', Frame 1, Line 29 1086: Syntax error: expecting semicolon before leftbracket. Mas como assim ta dando erro eu poderia tentar o for de outra maneira: for (var i:int = 1; i <= 2; i++) { // Onde o 'i' aqui nesse for depende de quantos botões eu tenho var mc:['btn' + i] = new ['btn' + i] (); mc.x = 1; mc.y = 2; mc.buttonMode = true; mc.label = "teste"; Y = Y + 65; menu.addChild(mc); } Aqui no caso eu só precisaria saber juntar aquele ['btn' + i], que com certeza não é assim porque da erro ali, mas sei que se eu souber um jeito certo de juntar pra ficar btn1, btn2, etc, daria certo! Eaí pessoal, alguma luz? hehe Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Janeiro 30, 2012 no seu for da pra por assim i < btnsMenu.length - 1 se tiver por exemplo 10 elementos no array vai sobrar um. ja que comeca do [0] Compartilhar este post Link para o post Compartilhar em outros sites
ddlightw 0 Denunciar post Postado Janeiro 30, 2012 Sei pouco, mas acredito que seja erro de sintaxe ou verifique se as instâncias estão corretas e se exportou para actionscript. Exemplos que podem te ajudar: http://www.kirupa.com/forum/showthread.php?355820-AS3-addChild-to-array-generated-menu http://www.republicofcode.com/tutorials/flash/as3arrays/ Compartilhar este post Link para o post Compartilhar em outros sites
marcos.cardoso 10 Denunciar post Postado Janeiro 31, 2012 Se o seu objetivo for trocar o frame do botão quando passa o mouse sobre e quando tirar o mouse voltar para o frame original, acho que esse código te ajudará: var btnsMenu:Array = new Array("home","contato"); for (var i:int = 0; i < btnsMenu.length; i++) { menu[btnsMenu[i]].addEventListener(MouseEvent.MOUSE_OVER, overButton); menu[btnsMenu[i]].addEventListener(MouseEvent.MOUSE_OUT, outButton); } function overButton(e:MouseEvent):void { menu[e.target.name].gotoAndStop(2); } function outButton(e:MouseEvent):void { menu[e.target.name].gotoAndStop(1); } Compartilhar este post Link para o post Compartilhar em outros sites