Evandro PH 0 Denunciar post Postado Janeiro 30, 2013 Olá, estou tendo um pequeno problema com reaproveitamento de código fonte, e tendo que repetir em vários locais, gostaria de ajuda se puderem... Explicando o problema: estou desenvolvendo um sisteminha em flash onde o usuário escolhe uma figura em uma lista, e após disso ele pode personalizar as cores dessa figura, através de uma tabela básica de cores. são 24 cores, que criei o botão para elas e defini a cor específica de cada um botão nomeado de b1,b2,b3... usando array: var btts:Array = [b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24]; var set_colors:Object = {'b1':0x000000, 'b2':0x333333, 'b3':0x666666, 'b4':0x999999, 'b5':0xCCCCCC, 'b6':0xEEEEEE, 'b7':0xFF0000, 'b8':0x663300, 'b9':0x333300, 'b10':0x006600, 'b11':0x006666, 'b12':0x003399, 'b13':0x0033FF, 'b14':0x3366FF, 'b15':0x6633FF, 'b16':0xCC6699, 'b17':0x996666, 'b18':0xFF9966, 'b19':0xFFCC00, 'b20':0xFF99CC, 'b21':0xFF33CC, 'b22':0x990066, 'b23':0xFF0099, 'b24':0x663366}; Após definir os botões e cores de cada um, fiz um loop para adicionar o evento aos botões: for(var i:int=0; i<btts.length; i++) { obj_color.color = set_colors[btts[i].name]; btts[i].transform.colorTransform = obj_color; btts[i].addEventListener(MouseEvent.CLICK, changeColor); } Após os botões, coloquei a figura e transformei cada "parte" dela em um MovieClip, ficando: mc1, mc2, mc3... Logo abaixo, a criação das variáveis que serão usadas no AS: var obj_color:ColorTransform = new ColorTransform(); var item:MovieClip = MovieClip(mc1); //onde mc1 é uma parte da figura que será mudara a cor E logo após a function que faz a troca da cor da figura: function changeColor(evt:Event):void { var b_name = evt.target.name; obj_color.color = set_colors[b_name]; item.transform.colorTransform = obj_color; } Até aí tudo certo, tudo funciona... Mas a hora de eu selecionar a "outra parte" que quero alterar a cor, não consigo fazer uma function genérica que eu consiga reutilizar para todos os MCs (mc1, mc2...) então tive que fazer assim: mc1.addEventListener(MouseEvent.CLICK, mudaClipe1); mc2.addEventListener(MouseEvent.CLICK, mudaClipe2); mc3.addEventListener(MouseEvent.CLICK, mudaClipe3); mc4.addEventListener(MouseEvent.CLICK, mudaClipe4); mc5.addEventListener(MouseEvent.CLICK, mudaClipe5); mc6.addEventListener(MouseEvent.CLICK, mudaClipe6); function mudaClipe1(event:MouseEvent):void { item = MovieClip(mc1); } function mudaClipe2(event:MouseEvent):void { item = MovieClip(mc2); } function mudaClipe3(event:MouseEvent):void { item = MovieClip(mc3); } function mudaClipe4(event:MouseEvent):void { item = MovieClip(mc4); } function mudaClipe5(event:MouseEvent):void { item = MovieClip(mc5); } function mudaClipe6(event:MouseEvent):void { item = MovieClip(mc6); } O problema é que tem uma figura com mais de 20 partes, e eu queria um comando genérico que entendesse que o último MC clicado seria o que teria a cor alterada... Tentei armazenar numa variável, ou alterar o valor da variável 'item' definida lá no início, mas não está funcionando... Algum help? Compartilhar este post Link para o post Compartilhar em outros sites
marcos.cardoso 10 Denunciar post Postado Janeiro 31, 2013 O que você precisa é disso: function inicializaBotoes():void { // btts.length representa a quantidade de mc que você tem // se o numero de mc não for igual ao numero dos objetos que estão no array btts // você tem que alterar isso no for trocando o btts.length pelo numero de mc. for (var i:int = 0; i < btts.length; i++) { this["mc" + i].addEventListener(MouseEvent.CLICK, mudaClipe); } } function mudaClipe(e:MouseEvent):void { // você pode utilizar o e.target para fazer referência ao mc clicado item = MovieClip(e.target); } Abs Compartilhar este post Link para o post Compartilhar em outros sites
Evandro PH 0 Denunciar post Postado Janeiro 31, 2013 Funcionou, somente fiz uma pequena alteração no "for", que deve criar um evento para cada MC, e a inclusão de uma array com o nome dos MCs (embora eu só precise dizer a quantidade...), ficou assim: var mcs:Array {mc1, mc2, mc3, mc4} for (var i:int = 0; i < mcs.length; i++) { // o resto ficou igual Muito obrigado pela ajuda Marcos! Compartilhar este post Link para o post Compartilhar em outros sites