• User

    [AS3] Problema codice pulsanti menú

    Ciao ragazzi, intanto grazie anticipatamente, apro questo thread poiché cercando nel forum non ho trovato soluzione...o meglio, ho provato qualcosa trovata ma non mi ha aiutato..

    Questo è il codice:

    [PHP]function onMouseClick(e:MouseEvent):void {
    switch(e.target.name) {
    case btn_home.name = "Home" :
    btn_home.addEventListener(MouseEvent.CLICK, onMouseClick);
    // quando fai click sul pulsante btn_home
    gotoAndPlay(1);
    break;
    case btn_obiettivi.name = "Obiettivi" :
    btn_obiettivi.addEventListener(MouseEvent.CLICK, onMouseClick);
    // quando fai click sul pulsante btn_obiettivi
    gotoAndPlay(2);
    break;
    case btn_prodotti.name = "Prodotti" :
    btn_prodotti.addEventListener(MouseEvent.CLICK, onMouseClick);
    // quando fai click sul pulsante btn_obiettivi
    gotoAndPlay(3);
    break;
    case btn_info.name = "Info" :
    btn_info.addEventListener(MouseEvent.CLICK, onMouseClick);
    // quando fai click sul pulsante btn_obiettivi
    gotoAndPlay(4);
    break;
    case btn_collabora.name = "Collabora" :
    btn_collabora.addEventListener(MouseEvent.CLICK, onMouseClick);
    // quando fai click sul pulsante btn_obiettivi
    gotoAndPlay(5);
    break;
    case btn_contatti.name = "Contatti" :
    btn_contatti.addEventListener(MouseEvent.CLICK, onMouseClick);
    // quando fai click sul pulsante btn_obiettivi
    gotoAndPlay(6);
    break;

              }   
    

    }[/PHP]

    Ovviamente ho nominato le istanze dei bottoni sopracitati ma niente...i pulsanti non funzionano! e rimango piantato sul primo frame 😕

    ho usato questo codice al posto di questo:

    [PHP]//Colleghiamo gli eventi all?istanza pulsante
    btn_home.addEventListener(MouseEvent.CLICK, onMouseClick);
    //Intercettare il click sul pulsante
    function onMouseClick(event:MouseEvent):void {
    gotoAndPlay(1);
    }

    //Colleghiamo gli eventi all?istanza pulsante
    btn_obiettivi.addEventListener(MouseEvent.CLICK, onMouseClick2);
    //Intercettare il click sul pulsante
    function onMouseClick2(event:MouseEvent):void {
    gotoAndPlay(2);
    }

    //Colleghiamo gli eventi all?istanza pulsante
    btn_prodotti.addEventListener(MouseEvent.CLICK, onMouseClick3);
    //Intercettare il click sul pulsante
    function onMouseClick3(event:MouseEvent):void {
    gotoAndPlay(3);
    }

    //Colleghiamo gli eventi all?istanza pulsante
    btn_info.addEventListener(MouseEvent.CLICK, onMouseClick4);
    //Intercettare il click sul pulsante
    function onMouseClick4(event:MouseEvent):void {
    gotoAndPlay(4);
    }

    //Colleghiamo gli eventi all?istanza pulsante
    btn_collabora.addEventListener(MouseEvent.CLICK, onMouseClick5);
    //Intercettare il click sul pulsante
    function onMouseClick5(event:MouseEvent):void {
    gotoAndPlay(5);
    }

    //Colleghiamo gli eventi all?istanza pulsante
    btn_contatti.addEventListener(MouseEvent.CLICK, onMouseClick6);
    //Intercettare il click sul pulsante
    function onMouseClick6(event:MouseEvent):void {
    gotoAndPlay(6);
    } [/PHP]

    Che funziona a metà cioè i comandi rispondono ma solo se clicco da sinistra a destra le voci...cioè le posizioni dei pulsanti sono: Home , obiettivi , prodotti , info , collabora e contatti? ecco se clicc su Obiettivi mentre sono su Home BENE! , se clicc o su prodotti mentre sono su obiettivi BENE! se clicc o su contatti mentre sono su Info BENE!

    Ma

    Se clicco su Home mentre sono su contatti (quindi andando dal Frame 6 al Frame 1) non va

    Non capisco perché, cioè non è un codice così complesso..

    Sapreste aiutarmi in uno dei due casi? Grazie ragazzi


  • Super User

    Il secondo codice non ha niente che non va è il modo più semplice di scrivere un codice per pulsanti anche se poco professionale, al massimo al posto dei vari gotoAndPlay(n° frame) scrivi gotoAndStop(n° frame), il primo così su due piedi non ti so dire perchè non ho mai approfondito il ciclo swicth preferendo usare usare il for, a naso direi che manca un Array perchè imposti una comparazione

    
     case.btn_home.name="Home"
    
    ``` ma "Home" da dove lo prende? Se non è istanziata una var o un Array.
    Comunque se vuoi ti fornisco io un codice facile facile.
    

    stop()
    var lista_menu:Array = new Array(btn_home, btn_obiettivi, btn_prodotti, btn_info, btn_collabora, btn_contatti)
    var vai:Array=new Array(1,2,3,4,5,6)
    for(var i:int=0;i<lista_menu.length;i++)
    {
    lista_menu*.indice=i
    lista_menu*.addEventListener(MouseEvent.MOUSE_DOWN,onClick)
    }
    function onClick(evento:MouseEvent):void {
    trace (evento.target.indice)
    gotoAndStop(vai[evento.target.indice])

      }
    

  • User

    Nathan intanto grazie per aver risposto.

    Dunque io quel codice non lo conosco bene , l'ho trovato su internet e l'ho adattato e provando ho notato che era quello che funzionava meglio.

    oddio 😮 nathan sappi che parli con un ritardato in merito XD

    dunque questo è il tuo codice:

    [PHP]stop()
    var lista_menu:Array = new Array(btn_home, btn_obiettivi, btn_prodotti, btn_info, btn_collabora, btn_contatti)
    var vai:Array=new Array(1,2,3,4,5,6)
    for(var i:int=0;i<lista_menu.length;i++)
    {
    lista_menu*.indice=i
    lista_menu*.addEventListener(MouseEvent.MOUSE_DOWN,onClick)
    }
    function onClick(evento:MouseEvent):void {
    trace (evento.target.indice)
    gotoAndStop(vai[evento.target.indice])

      }[/PHP]
    

    io come lo devo compilare? lista_menu è da sostituire con? e evento.target.indice?

    E poi una cosa...nel tuo codice la funzione è solo una

    [PHP]}
    function onClick(evento:MouseEvent):void {
    trace (evento.target.indice)
    gotoAndStop(vai[evento.target.indice])

      }[/PHP]
    

    o devo compiarla e incollarla sotto tanti quanti sono i pulsanti?

    Riusciresti a compirlarlo tu? io sono tipo che le cose vuole conoscerle da solo eh però qui non so da dove partire perché ci sono differenti cose che non ho mai visto (non che abbia tutta st'esperienza XD)

    grazie Nathan


  • Super User

    Non devi fare altro che incollarlo nel tuo filmato, se hai sullo stage 6 pulsanti con quei nomi istanza e 6 fotogrammi da navigare devi solo copiare il codice nel primo frame senza fare altro.


  • User

    Mi da questo problema 😕

    ReferenceError: Error #1056: Impossibile creare la proprietà indice su flash.display.SimpleButton.
    at exempleULTIMO_fla::MainTimeline/frame1()

    As3 maledetto :S


  • User

    HO RISOLTO GRAZIE Nathan 😄 grazie milleeeee

    dunque posto la soluzione AD UN MIO ERRORE , per evitare che altri lo commettano (penso di no perché troppo stupido)

    Allora con il gotoAndPlay capitava che ero nella pagina prodotti? il pulsante rimaneva attivo e se ci ciccavo nuovamente mi attivava in gotoandplay e non so perché il play faceva camminare i frame

    cosa ho fatto allora (scemo io)

    in ogni pagina al posto del pulsante corrispondente alla pagina a cui faceva riferimento...io eliminavo il suddetto pulsante (lasciando attivi tutti gli altri) per evitare che rimanesse attivo e cliccabile...quindi per ogni pulsante che andavo a sostituire mettevo uno stop (è giusto).

    Ora cosa ho fatto...ho detto cavolo non è possibile che mi devo andare a sostituire i sei pulsanti sondituendo ogni pulsante con un immagine dello stesso pulsante, per renderlo inattivo e non permettere alll'utente di cliccarci (perché sennò il gotoandplay lo mandava alla pagina seguente).

    Ho messo su un fotogramma tutto il menu, ma ho creato un solo fotogramma chiave e i 5 restanti (un frame per ogni pulsante) erano fotogrammi semplici (mentre prima erano tutti chiave poiché dovevo sostituire pulsante per pulsante con un immagine per renderlo inattivo).

    ho usato questo codice:

    [PHP]import flash.events.Event
    import flash.events.MouseEvent;

    btn_home.addEventListener(MouseEvent.CLICK, onMouseClick);
    function onMouseClick(event:MouseEvent):void {
    gotoAndStop(1);
    }

    btn_obiettivi.addEventListener(MouseEvent.CLICK, onMouseClick2);
    function onMouseClick2(event:MouseEvent):void {
    gotoAndStop(2);
    }

    btn_prodotti.addEventListener(MouseEvent.CLICK, onMouseClick3);
    function onMouseClick3(event:MouseEvent):void {
    gotoAndStop(3);
    }

    btn_info.addEventListener(MouseEvent.CLICK, onMouseClick4);
    function onMouseClick4(event:MouseEvent):void {
    gotoAndStop(4);
    }

    btn_collabora.addEventListener(MouseEvent.CLICK, onMouseClick5);
    function onMouseClick5(event:MouseEvent):void {
    gotoAndStop(5);
    }

    btn_contatti.addEventListener(MouseEvent.CLICK, onMouseClick6);
    function onMouseClick6(event:MouseEvent):void {
    gotoAndStop(6);
    }[/PHP]

    cioè il primo funzionante, ma ho usato il gotoandstop che con tutti gli altri successivi codici non funzionava quindi mi ero detto se non funziona in questi sicuramente non funziona neanche nel primo che ho usato.

    Ora va benissimo!

    Io ti ringrazio di cuore per l'aiuto che mi hai dato perché non solo mi ha fatto ragionare (sul gotoandstop) ma ho comunque imparato antre cose 🙂

    (ora mi resta da risolvere il problema del form che non so come fare, infatti ne ho preso uno pronto da un .fla scaricato...solo che non mi sta inviando la mail :/)


  • Super User

    Apri una nuova discussione per il form.


  • User

    issi lo so 🙂 però prima voglio sbatterci un po la testa...spero di riuscirci solo se no passo 😄