Follow us on...
Follow us on Twitter Follow us on Facebook
Registrazione
Risultati da 1 a 6 di 6

Discussione: Btn dentro Btn

  1. #1
    Data Registrazione
    Jan 2009
    Messaggi
    184

    Predefinito Btn dentro Btn

    salve
    domandina:

    come suddividere le funzioni di due btn annidati? Devo per forza appesantire creando due mc diversi inseriti in un mc contenitore?
    Se un MC cliccato mi da un trace, dentro questo mc un secondo MC più piccolo che se cliccato mi da un trace diverso, il fatto è che ora come ora se clicco sull'mc più piccolo mi da il trace di entrambi, quando vorrei che siano due trace separati, vorrei che se clicco il piccolo solo il trace del piccolo, se clicco il grande solo il trace del grande:

    Codice PHP:
    function addMc(n):void
    {
        var 
    mc:MovieClip = new MovieClip();
        var 
    random_color:Number Math.random() * 0xffffff;
        
    mc.graphics.beginFill(random_color);
        
    mc.graphics.drawRect(00100100);
        
    mc.graphics.endFill();
        
    mc.mouseChildren true;
        
    box.addChild(mc);

        var 
    mcx:MovieClip = new MovieClip();
        
    mcx.graphics.beginFill(0xffffff);
        
    mcx.graphics.drawRect(7222525);
        
    mcx.graphics.endFill();
        
    mcx.buttonMode true;
        
    mc.addChild(mcx);

        
    mc.addEventListener(MouseEvent.MOUSE_DOWNp);
        
    mcx.addEventListener(MouseEvent.MOUSE_DOWNd);
    }

    function 
    p(e:MouseEvent)
    {
        
    trace("p");
    }

    function 
    d(e:MouseEvent)
    {
        
    trace("d");

    Voglio diventare un programmatore vero!!

  2. #2
    Data Registrazione
    Jan 2009
    Messaggi
    184

    Predefinito

    devo per forza fare così? Mi è presa la fissa di alleggerire sempre tutto, scrivendo meno codice possibile, meno mc ci sono meno ram succhia l'applicazione no?

    Codice PHP:
    function addMc(n):void
    {
        var 
    mcBox:MovieClip mcStage.addChild(new MovieClip  ) as MovieClip;
        
        var 
    mc:MovieClip = new MovieClip();
        var 
    random_color:Number Math.random() * 0xffffff;
        
    mc.graphics.beginFill(random_color);
        
    mc.graphics.drawRect(00100100);
        
    mc.graphics.endFill();
        
    mc.mouseChildren true;
        
    mcBox.addChild(mc);

        var 
    mcx:MovieClip = new MovieClip();
        
    mcx.graphics.beginFill(0xffffff);
        
    mcx.graphics.drawRect(7222525);
        
    mcx.graphics.endFill();
        
    mcx.buttonMode true;
        
    mcBox.addChild(mcx);

        
    mc.addEventListener(MouseEvent.MOUSE_DOWNp);
        
    mcx.addEventListener(MouseEvent.MOUSE_DOWNd);
    }

    function 
    p(e:MouseEvent)
    {
        
    trace("p");
    }

    function 
    d(e:MouseEvent)
    {
        
    trace("d");

    Voglio diventare un programmatore vero!!

  3. #3
    Data Registrazione
    Jan 2009
    Messaggi
    184

    Predefinito

    per non parlare aggiungendo un TextField, anche con il mouseChildren false non funziona, il testo mi toglie la manina e la funzione, nonostante abbia chiuso il text in un ennesimo mc:


    Codice PHP:
    function addMc(n):void
    {
        var 
    mcBox:MovieClip mcStage.addChild(new MovieClip  ) as MovieClip;


        var 
    mc:MovieClip = new MovieClip();
        var 
    random_color:Number Math.random() * 0xffffff;
        
    mc.graphics.beginFill(random_color);
        
    mc.graphics.drawRect(00100100);
        
    mc.graphics.endFill();
        
    mc.buttonMode true;
        
    mc.mouseChildren true;
        
    mcBox.addChild(mc);

        var 
    mcX:MovieClip = new MovieClip();
        
    mcX.graphics.beginFill(0xffffff);
        
    mcX.graphics.drawRect(7222525);
        
    mcX.graphics.endFill();
        
    mcX.buttonMode true;
        
    mcBox.addChild(mcX);

        var 
    mcBoxT:MovieClip mcBox.addChild(new MovieClip  ) as MovieClip;
        
    mcBoxT.mouseChildren false;
        var 
    myT:TextField = new TextField();
        
    myT.text n;
        
    myT.selectable false;
        
    myT.border true;
        
    myT.autoSize TextFieldAutoSize.LEFT;
        
    mcBoxT.addChild(myT);


        
    mc.addEventListener(MouseEvent.MOUSE_DOWNp);
        
    mcX.addEventListener(MouseEvent.MOUSE_DOWNd);

    Voglio diventare un programmatore vero!!

  4. #4
    Data Registrazione
    Sep 2010
    Messaggi
    483

    Predefinito

    Ciao,
    cerco di risponderti un passo alla volta... allora:

    Visto che metti i 2 movieclip che dovranno rispondere all' evento click del mouse all' interno di un Movieclip contenitore assegnerei un nome alle istanze dei 2 Movieclip,
    potrebbe servire a livello di codice..non si sa mai :

    Codice:
    ....
       mc.name="RectBig";
       ....
       ....
       mcx.name="RectLittle";
       ...
    ...
    abilito il buttonMode per i 2 movieclip :

    Codice:
    ....
       mc.name="RectBig";
       mc.buttonMode = true;
       ....
       ....
       mcx.name="RectLittle";
       mcx.buttonMode = true;
       ...
    ...
    infine creo una sola funzione listener per intercettare il click del mouse su i 2 movieclip

    Codice:
    ....
       mc.name="RectBig";
       mc.buttonMode = true;
       ....
       ....
       mcx.name="RectLittle";
       mcx.buttonMode = true;
       ...
       mc.addEventListener(MouseEvent.MOUSE_DOWN, pippo);    
       mcx.addEventListener(MouseEvent.MOUSE_DOWN, pippo); 
    ...
    Nella funzione listener pippo per sapere su quale movieclip è stato fatto click userò la proprietà name impostata prima
    Ad esempio sfruttando la classe MouseEvent per sapere qual'è il target dell'evento.
    Se scopro qual' è il nome del target dell'evento click saprò quale movieclick è stato selezionato, quindi:

    Codice:
    function pippo(e:MouseEvent):void {
        switch (e.target.name) {
            case "RectBig":
                trace("Big Rect"); 
                break;
            case "RectLittle" :
                trace("Little Rect");
                break;
        }
        
    }
    ecco il codice completo delle aggiunte :

    Codice:
    function addMc(n):void 
    { 
         
        var mcBox:MovieClip = addChild(new MovieClip  ) as MovieClip; 
        
         
        var mc:MovieClip = new MovieClip(); 
        var random_color:Number = Math.random() * 0xffffff; 
        mc.graphics.beginFill(random_color); 
        mc.graphics.drawRect(0, 0, 100, 100); 
        mc.graphics.endFill(); 
        mc.buttonMode = true;
        mc.name="RectBig";
        mcBox.addChild(mc); 
    
    
        var mcx:MovieClip = new MovieClip(); 
        mcx.graphics.beginFill(0xffffff); 
        mcx.graphics.drawRect(72, 2, 25, 25); 
        mcx.graphics.endFill();
        mcx.buttonMode = true;
        mcx.name="RectLittle";
        mcBox.addChild(mcx); 
        
        mc.addEventListener(MouseEvent.MOUSE_DOWN, pippo); 
        mcx.addEventListener(MouseEvent.MOUSE_DOWN, pippo); 
        
    } 
    
    
    function pippo(e:MouseEvent):void {
        switch (e.target.name) {
            case "RectBig":
                trace("Big Rect"); 
                break;
            case "RectLittle" :
                trace("Little Rect");
                break;
        }
        
    }
    

  5. #5
    Data Registrazione
    Sep 2010
    Messaggi
    483

    Predefinito

    Ok , ora rimane il testo... allora la logica è la stessa. assegno un nome al movieclip che conterrà il textfield, abilito
    la manima e disabilito il mouseChildren per non fare sparire la manina quando il mouse è posizionato sopra il textfield :

    Codice:
    ...
       ...
       mcBoxT.buttonMode=true;
       mcBoxT.mouseChildren=false;
       mcBoxT.name="Testo";
       ...
    ...
    dopo aver impostato le proprietà del TextFiled aggiungo al movieclip il textfield ed in fine quest'ultimo movieclip lo aggiungo al movieclip contenitore:

    Codice:
    ...
       ...
        mcBoxT.addChild(myT);   
        mcBox.addChild(mcBoxT);
       ...
    ...
    aggiungo il listener per il movieclip del testo:

    Codice:
    ...
       ...
       mcBoxT.addEventListener(MouseEvent.MOUSE_DOWN, pippo); 
       ...
    ...
    rimane solo da aggiungere il codice nella funzione listener per sapere quando si fa click sul testo:

    Codice:
    ...
       case "Testo" :      trace("Selezionato MovieClip TextBox");
          break;
    ...
    ecco infine tutto il codice con le aggiunte fatte:

    Codice:
    
    
    function addMc(n:String):void 
    { 
         
        var mcBox:MovieClip = addChild(new MovieClip  ) as MovieClip; 
        
         
        var mc:MovieClip = new MovieClip(); 
        var random_color:Number = Math.random() * 0xffffff; 
        mc.graphics.beginFill(random_color); 
        mc.graphics.drawRect(0, 0, 100, 100); 
        mc.graphics.endFill(); 
        mc.buttonMode = true;
        mc.name="RectBig";
        mcBox.addChild(mc); 
    
    
        var mcx:MovieClip = new MovieClip(); 
        mcx.graphics.beginFill(0xffffff); 
        mcx.graphics.drawRect(72, 2, 25, 25); 
        mcx.graphics.endFill();
        mcx.buttonMode = true;
        mcx.name="RectLittle";
        mcBox.addChild(mcx); 
        
        var mcBoxT:MovieClip = mcBox.addChild(new MovieClip  ) as MovieClip; 
        mcBoxT.buttonMode=true;
        mcBoxT.mouseChildren=false;
        mcBoxT.name="Testo";
        
        var myT:TextField = new TextField(); 
        myT.text = n; 
        myT.selectable = false; 
        myT.border = true; 
        myT.autoSize = TextFieldAutoSize.LEFT; 
        mcBoxT.addChild(myT);
        mcBox.addChild(mcBoxT);
    
    
        mc.addEventListener(MouseEvent.MOUSE_DOWN, pippo); 
        mcx.addEventListener(MouseEvent.MOUSE_DOWN, pippo); 
        mcBoxT.addEventListener(MouseEvent.MOUSE_DOWN, pippo); 
    } 
    
    
    function pippo(e:MouseEvent):void {
        switch (e.target.name) {
            case "RectBig":
                trace("Big Rect"); 
                break;
            case "RectLittle" :
                trace("Little Rect");
                break;
            case "Testo" :
                trace("Selezionato MovieClip TextBox");
                break;
        }
    
    }
    N.B.

    è solo un esempio su come procedere......non è oro colato !!!

    Buon studio

  6. #6
    Data Registrazione
    Jan 2009
    Messaggi
    184

    Predefinito

    Mrphp ti ringrazio
    non avevo mai usato lo switch, è comodo e semplice rispetto a vari cicli di if!
    Grazie ancora.
    Voglio diventare un programmatore vero!!

 

 

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •