• User

    [AS3] Rimuovere un Child dallo Stage con Pulsante

    Rieccomi qui a fracassarvi le scatole 😞 , apro il thread poiché trovo delle difficoltà nel far si che un Child caricato in un frame (è un Form in sostanza, ma mentre qui è un form...in un altra pagina ho la mappa di google fatta con il codice API quindi è un comando che mi servirebbe molto..) venga rimosso nel momento in cui io passo in un altro frame/pagina e quindi dovrei riuscire a fare il modo che tale Child venga rimosso al click di QUALSIASI pulsante del menu.

    Questo è il codice del form

    [PHP]import com.warmforestflash.ContactForm;

    var contactForm:ContactForm = new ContactForm();

    contactForm.nameText = "Type your name here";
    contactForm.emailText = "Type your email here";
    contactForm.messageText = "Type your message here";
    contactForm.sendButtonText = "INVIA";
    contactForm.sendingText = "Sending message...";
    contactForm.errorEmailText = "Your email is not valid.";
    contactForm.errorServerText = "Server problems.";
    contactForm.confirmationText = "Thanks for contacting me!";

    contactForm.textColor = 0x000000;
    contactForm.borderColor = 0x222222;
    contactForm.backgroundColor = 0x000000;
    contactForm.selectedBorderColor = 0xCCCCCC;
    contactForm.selectedBackgroundColor = 0xffffff;
    contactForm.selectedBlurAmount = 50;
    contactForm.sendButtonTextColor = 0xffffff;
    contactForm.sendButtonTextRollOverColor = 0xffffff;
    contactForm.sendButtonColor = 0x05b59a;
    contactForm.sendButtonRollOverColor = 0xff4400;
    contactForm.errorColor = 0xff4400;
    contactForm.confirmationColor = 0x05b59a;

    contactForm.nameWidth = 400;
    contactForm.emailWidth = 400;
    contactForm.messageWidth = 550;
    contactForm.messageHeight = 200;
    contactForm.verticalSpacing = 10;

    addChild(contactForm);
    contactForm.x = 100;
    contactForm.y = 100;

    [/PHP]

    e questo è il removeChild che ho creato (perché penso serva un removeChild dato che ho caricato un Child)

    [PHP]
    addEventListener(MouseEvent.CLICK, onMouseClick10);
    function onMouseClick10(event:MouseEvent):void {
    removeChild(contactForm);
    }[/PHP]

    Non mettendo nulla davanti all'addEventListener (L'HO SCOPERTO PER CUL OPS FORTUNA XD) al qualsiasi click di qualsiasi pulsante del menu (ho solo quei pulsanti sul sito) il form sparisce e l'utente riesce ad andare nelle altre pagine senza che il form rimanga.

    Purtroppo funziona a metà 😕 in quanto, si riesco a navigare nelle altre pagine tranquillamente ma mi appare un errore output:

    ArgumentError: Error #2025: Il valore fornito per DisplayObject deve essere un elemento secondario del chiamante.
    at flash.display::DisplayObjectContainer/removeChild()
    at index2_fla::MainTimeline/onMouseClick10()

    Che come si può vedere è problema del codice generico che ho messo e che per caso ho scoperto.

    Domanda quindi: come faccio a sistemare quel cosice? come faccio a generalizzare il codice in maniera corretta? dopo di ciò so anche che è possibile eliminare COMPLETAMENTE L'oggetto (perché così com'è ora rimane in memoria e appesantisce il progetto...) con un comando simile al ...= null; ma non ricordo com'è...

    Grazie anticipatamente


  • Super User

    Ti da qull'errore perchè fa il removeChild anche se il form non è caricato, prova a dichiarare una variabile Booleana e valorizzarla a true solo quando il form è caricato, quindi metti il removeChild dentro una condizione if

    
    if(controllo==true)
    {
    removeChild(contactForm)
    }
    
    

  • User

    Nhatan arriverai al punto che avrai parlato più con me che con qualsiasi altra persona in tutta la tua vita hahahaha 😄

    Grazie ancora per il supporto ma non ho capito.

    Cioè ho capito ma non so come agire.

    Io ho capito (dimmi se erro giustamente) che devo , tramite questo codice, far verificare al codice il corretto caricamente del form e solo dopo (il click chiaramente) rimuoverlo dallo stage.

    Insomma quello che non ho capito è cosa devo mettere in "controllo" e...questo codice so che devo metterlo dentro questo:

    [PHP]addEventListener(MouseEvent.CLICK, onMouseClick10);
    function onMouseClick10(event:MouseEvent):void {
    removeChild(contactForm);
    } [/PHP]

    ma non so dove di preciso 😕

    TI FARO' UNA STATUA TI GIURO 😄


  • Super User

    Dunque se tu hai un pulsante che carica il form.

    
    stop()
    var loader:Loader = new Loader();
    var controllo:Boolean=false
    btn_carica_form.addEventListener(MouseEvent.CLICK, carica_form);
    
    function carica_form(event:MouseEvent) {   
        loader.load(new URLRequest("form.swf"))
       
      //form ad esempio al frame 2
      gotoAndStop(2)
      controllo=true
      trace(controllo)
      }
    addChild(loader)
    
    //e lo devi scaricare qualsiasi pulsante premi ad esempio btn_home
    btn_home.addEventListener(MouseEvent.CLICK, onClick);
    function onClick(event:MouseEvent) {   
     if(controllo==true)
    {
    removeChild(loader)
    }
    gotoAndStop(1)
    controllo=false
     trace(controllo)
    }
    
    

    prova un pò se funziona.


  • User

    Allora il form lo carica ma non lo scarica e i pulsanti non sono molto reattivi quando vengono usati...e mi da anche errore di sicurezza

    l'ho compilato cosi:

    [PHP]stop()
    var loader:Loader = new Loader();
    var controllo:Boolean=false
    btn_contatti.addEventListener(MouseEvent.CLICK, carica_form);

    function carica_form(event:MouseEvent) {
    loader.load(new URLRequest("contactForm"))

    //form ad esempio al frame 2
    gotoAndStop(2)
    controllo=true
    trace(controllo)
    }
    addChild(contactForm)

    //e lo devi scaricare qualsiasi pulsante premi ad esempio btn_home
    btn_home.addEventListener(MouseEvent.CLICK, onClick);
    function onClick(event:MouseEvent) {
    if(controllo==true)
    {
    removeChild(contactForm)
    }
    gotoAndStop(1)
    controllo=false
    trace(controllo)
    }[/PHP]

    Per quanto riguarda il caricamento comunque con il codice che ho postato al primo post riesco a caricarlo...non possiamo usare un semplice removeChild associato ad un qualcosa che generalizzi e dica che qualsiasi pulsante venga cliccato, il form venga scaricato?

    Perché dal codice tuo a quanto ho capito devo andare a creare comunque 6 "gruppi":

    [PHP]//e lo devi scaricare qualsiasi pulsante premi ad esempio btn_home
    btn_home.addEventListener(MouseEvent.CLICK, onClick);
    function onClick(event:MouseEvent) {
    if(controllo==true)
    {
    removeChild(loader)
    }
    gotoAndStop(1)
    controllo=false
    trace(controllo)
    }[/PHP]

    Un altra cosa, il form che carico è un istanza in realtà e non un swf esterno...un istanza dal nome contactForm che per la precisione è questo:

    ***.warmforestflash.com/blog/2009/06/flash-as3-contact-form-using-php/

    per ovviare ad inutili tentativi di caricamento (non vorrei fosse protetto anche questo come l'ultima galleria di cui parlammo tempo fa..) sai dirmi se esiste qualche form da poter inserire e basta e che magari tu hai provato così da esser sicuri?

    Ciao Nhatan grazie ancora


  • User

    Nhatan ho risolto aggiungendo una parte di quello che hai scritto , ma in maniera differente.Faccio riferimento per la precisione al controllo, e alla sua funzione.

    il codice ora è così composto (se dovesse mai servire a qualcuno):

    [PHP]btn_home.addEventListener(MouseEvent.CLICK, onMouseClick7);
    function onMouseClick7(event:MouseEvent):void {
    if(this.contains(contactForm)) removeChild(contactForm);
    }

    btn_obiettivi.addEventListener(MouseEvent.CLICK, onMouseClick8);
    function onMouseClick8(event:MouseEvent):void {
    if(this.contains(contactForm)) removeChild(contactForm);
    }

    btn_prodotti.addEventListener(MouseEvent.CLICK, onMouseClick9);
    function onMouseClick9(event:MouseEvent):void {
    if(this.contains(contactForm)) removeChild(contactForm);
    }

    btn_info.addEventListener(MouseEvent.CLICK, onMouseClick10);
    function onMouseClick10(event:MouseEvent):void {
    if(this.contains(contactForm)) removeChild(contactForm);
    }

    btn_collabora.addEventListener(MouseEvent.CLICK, onMouseClick11);
    function onMouseClick11(event:MouseEvent):void {
    if(this.contains(contactForm)) removeChild(contactForm);
    }[/PHP]

    come puoi vedere ho aggiunto il controllo in ogni pulsante tranne in quello del form giustamente, perché se veniva cliccato il controllo si accorgeva del form e lo faceva sparire pur restando nella stessa pagina...

    in particolare questa è la parte che ho aggiunto:

    [PHP]if(this.contains(contactForm)) [/PHP]

    Grazie 1000 per l'aiuto! grazie! 🙂 mi manca l'altra metà del sito ed ho finito XD però non dovrei incontrare problemi se non la lotta contro il funzionamento del form (e questo lo devo provare sul server) e il caricamento del sito al 100% di un browser..

    un info nhatan, ma se io volessi che questo sito venga caricato in risoluzioni differenti...io che devo andarmi a ricreare tutte le immagini che ho usato in diversi formati? (800x600 - 1024x768 quello che uso ora - 1280x1024)