• User Newbie

    Creare listener su bottoni con ciclo for

    Ho il seguente codice di prova:

    
    package {
        import flash.display.Sprite;
        import flash.events.MouseEvent;
        public class prova_2 extends Sprite {
            function prova_2():void {
                    pls_1.addEventListener(MouseEvent.CLICK,function(evento:MouseEvent){scrivi(1);});
                    pls_2.addEventListener(MouseEvent.CLICK,function(evento:MouseEvent){scrivi(2);});
                    pls_3.addEventListener(MouseEvent.CLICK,function(evento:MouseEvent){scrivi(3);});
                    pls_4.addEventListener(MouseEvent.CLICK,function(evento:MouseEvent){scrivi(4);});
                    pls_5.addEventListener(MouseEvent.CLICK,function(evento:MouseEvent){scrivi(5);});
        
            }
            function scrivi(numero:uint):void {
                trace (numero);
            }
        }
    }
    
    ```pls_1, pls_2 ecc. sono pulsanti inseriti nel filmato.
    
    Il codice funziona, ma se io avessi più di cento pulsanti sarebbe molto   comodo usare un ciclo. Ed ecco che ho due problemi: il primo è che  anche  se i nomi delle istanze dei pulsanti contengono un riferimento  numerico  non so come richiamarli durante il ciclo. L'unico modo che ho  trovato è  creare un Array contente i riferimenti ai vari pulsanti, ma  se avessi  mille pulsanti dovrei scrivermi a mano un Array lunghissimo.
    Il secondo problema è che quand'anche utilizzassi l'Array per richiamare   i pulsanti, non riesco ad assegnare parametri diversificati alla   funzione scrivi().
    Qualcuno mi può mostrare come scrivere un ciclo for ed avere lo stesso risultato del codice sopra?

  • Super User

    Ciao giancarlo75, non sono molto bravo con as3 e actionscript in generale ma credo, almeno da quello che ho studiato, che non si possa fare a meno degli Array

    
    var My_menu:Array = new Array (pls_1,pls_2,pls_3,pls_4,pls_5)
    
     for(var i:int=0;i<My_menu.length;i++)
     {
            My_menu*.addEventListener(MouseEvent.MOUSE_DOWN,onClick)
         }   
           function onClick(evento:MouseEvent):void {
                trace (evento.target.name)
                 }
    
    

  • User Newbie

    E' quello che temo anch'io, vorrei che non fosse così ma mi sa che non c'è alterntiva. L'unica è allora lavorare su database ed xml per creare automaticamente degli array, altrimenti a mano sarebbe un lavoro lunghissimo. A quel punto non occorre nemmeno che gli elementi abbiano tutti un nome uguale numerato.


  • Super User

    Però non posso credere che devi fare un sito in flash con 1000 pulsanti, anche se sono 10 , 20 o 50 non è che sia un lavoro così immane, poi a patto che svolgano tutti la stessa azione, che so link a pagine o caricare swf esterni anche la funzione basta scriverla una volta sola, creando un altro Array che includa i link o gli swf da caricare e mettendo dentro il ciclo for un indice.


  • User Newbie

    No non devo fare un sito, è solo una prova per capire quello che posso e quello che non posso fare con actionscript, una cosa a livello di studio.


  • Super User

    Ahh! Ok.