Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: [AS3] removeChild prob

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    62

    [AS3] removeChild prob

    Ciao, ho appena fatto l'iscrizione.
    Sto muovendomi a fatica in AS, e sono già ad un bel blocco

    Ho un movieClip statico che voglio far scomparire al clic di uno dei pulsanti del menu.

    Provando su uno di questi riesco a toglierlo con removeChild e tutto sembra funzionare.
    Quando però si rischiaccia il medesimo pulsante, l'output è:

    ArgumentError: Error #2025: Il valore fornito per DisplayObject deve essere un elemento secondario del chiamante. at flash.display:isplayObjectContainer/removeChild() at 4pagesBtnsChild_fla::MainTimeline/buttonClicked()


    Capisco che dopo la prima volta quel MovieClip non c'è più, ma non ho idea di come procedere

    La parte del codice incriminato:

    Codice PHP:
    loader = new Loader();       
    if (
    e.target == btn1_mc)
    {  
    this.removeChild(static_mc);
    urlRequest = new URLRequest("page1.swf");
    loader.load (urlRequest);
    else if (
    e.target == page01Button) {
    urlRequest = new URLRequest("page2.swf");
    loader.load (urlRequest);     } 

    Grazie a chi volesse darmi una dritta

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Puoi usarlo dentro ad un'istruzione try...catch per zittire l'errore nelle fasi successive.
    Codice PHP:
    loader = new Loader();       
    if (
    e.target == btn1_mc) {
        try {
            
    this.removeChild(static_mc);
        } catch (
    err:Error) {
            
    // nessun errore
        
    }
        
    urlRequest = new URLRequest("page1.swf");
        
    loader.load (urlRequest);
    } else if (
    e.target == page01Button) {
        
    urlRequest = new URLRequest("page2.swf");
        
    loader.load (urlRequest);


  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    62
    wow, grazie grazie!
    Ho provato ed ora non dà l'errore, ma c'è ancora un problemino: al primo click sul pulsante sparisce il MovieClip che deve sparire, ma non si carica l'SWF che deve apparire, collegato a quel pulsante. Bisogna clicccare un'altra volta e arriva.
    Si può risolvere?

    Inoltre, il codice 'try'... 'catch' devo usarlo su tutti i pulsanti che aprono le altre sezioni, giusto? perchè ovviamente non so quale pulsante l'utente del sito vada a schiacciare per primo.

    Grazie ancora per l'aiuto

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Salvo che non ci sia qualche altra linea di codice che fa interferenza, dovrebbe funzionare già dal primo click.

    Riguardo alla seconda domanda, in realtà sarebbe più conveniente gestire la cosa in maniera diversa, ad esempio sarebbe meglio impostare una variabile "clip_da_cancellare" per ogni pulsante, in modo che quando viene cliccato il pulsante rimuove il clip giusto, anche se non mi è chiaro come dovrebbe avvenire la cosa.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    62
    Si tratta di un menu con 4 pulsanti, ognuno dei quali apre un SWF della sezione corrispondente.

    E' il caso di inviare il codice completo?

    PS: Per quanto riguarda la "variabile-clip da cancellare... etc" che consigli, non saprei come fare :-(

    Grazie

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da soph
    Si tratta di un menu con 4 pulsanti, ognuno dei quali apre un SWF della sezione corrispondente.

    E' il caso di inviare il codice completo?

    PS: Per quanto riguarda la "variabile-clip da cancellare... etc" che consigli, non saprei come fare :-(

    Grazie
    Sì, meglio che posti il codice, perchè così non riesco ad aiutarti.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    62
    Ecco qua. E' un esempio che sto modificando. Al momento solo un pulsante è animato (btn1_mc)

    Codice PHP:

    import fl
    .transitions.*;
    import fl.transitions.easing.*;



    page01Button.addEventListener (MouseEvent.CLICKbuttonClicked);
    page02Button.addEventListener (MouseEvent.CLICKbuttonClicked);
    page03Button.addEventListener (MouseEvent.CLICKbuttonClicked);
    btn1_mc.addEventListener (MouseEvent.CLICKbuttonClicked);
     


    page01Button.buttonMode true;
    page02Button.buttonMode true;
    page03Button.buttonMode true;
    btn1_mc.buttonMode true;




    btn1_mc.addEventListener(MouseEvent.ROLL_OVERonButtonOver);
    btn1_mc.addEventListener(MouseEvent.ROLL_OUTonButtonOut);

    function 
    onButtonOver(e:MouseEvent):void
    {
        
    e.currentTarget.gotoAndPlay("over");
    }

    function 
    onButtonOut(e:MouseEvent):void
    {
        
    e.currentTarget.gotoAndPlay("out");
    }

     

    var 
    loader:Loader;
     

    var 
    urlRequest:URLRequest;
     

    var 
    tweens:Array = new Array();
     

    var 
    currentPage:MovieClip null;
     

    var 
    nextPage:MovieClip null;
     

    function 
    buttonClicked (e:Event):void {
     

        
    loader = new Loader();
     

        if (
    e.target == btn1_mc) {
    try {

    this.removeChild(static_mc);}
    catch (
    err:Error) {
            
    // nessun errore }
            
            
            
    urlRequest = new URLRequest("page1.swf");
            
    loader.load (urlRequest);
            
        }
        }
     
        
        else if (
    e.target == page01Button) {
    try {

    this.removeChild(static_mc);}
    catch (
    err:Error) {
            
    // nessun errore }
            
            
    urlRequest = new URLRequest("page2.swf");
            
    loader.load (urlRequest);
        }
        }
     

        else if (
    e.target == page02Button) {
     
     try {

    this.removeChild(static_mc);}
    catch (
    err:Error) {
            
    // nessun errore }
            
    urlRequest = new URLRequest("page1.swf");
            
    loader.load (urlRequest);
        }
        }
        
        else {
            
            try {

    this.removeChild(static_mc);}
    catch (
    err:Error) {
            
    // nessun errore }
     
            
    urlRequest = new URLRequest("page2.swf");
            
    loader.load (urlRequest);
        }
        }
        
     

        
    loader.contentLoaderInfo.addEventListener(Event.COMPLETEfileLoaded);
     
    }
     

    function 
    fileLoaded(e:Event):void {
     

        
    nextPage e.target.content;


        if(
    currentPage != null) {
     
        
            var 
    tweenX:Tween = new Tween(currentPage"x"Regular.easeOut
                            
    currentPage.x2001true);
     
            var 
    tweenAlpha:Tween = new Tween(currentPage"alpha"Regular.easeOut
                            
    101true);

            
    tweens.push(tweenX);
            
    tweens.push(tweenAlpha);
     
        
            
    tweenX.addEventListener(TweenEvent.MOTION_FINISHcurrentPageGone);
        }
     

        else {
            
    showNextPage();
        }
    }
     

    function 
    showNextPage():void {
     
        
            var 
    tweenX:Tween = new Tween(nextPage"x"Regular.easeOut
                            -
    20002true);

            var 
    tweenAlpha:Tween = new Tween(nextPage"alpha"Regular.easeOut
                            
    011true);
     
            
    tweens.push(tweenX);
            
    tweens.push(tweenAlpha);

            
    addChild(nextPage);
     

            
    currentPage nextPage;
    }
     

    function 
    currentPageGone(e:Event):void {
     
        
    removeChild(currentPage);

        
    showNextPage();


  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ah ok, quindi lo static_mc è quello che va sempre eliminato, qualsiasi sia il pulsante cliccato.
    Allora basta che lo metti una sola volta fuori dagli if

    Codice PHP:
    function buttonClicked (e:Event):void {
        
    loader = new Loader();
        
    loader.contentLoaderInfo.addEventListener(Event.COMPLETEfileLoaded);
        try {
            
    this.removeChild(static_mc);
        } catch (
    err:Error) {
            
    // nessun errore
        
    }
        if (
    e.target == btn1_mc) {
            
    urlRequest = new URLRequest("page1.swf");
            
    loader.load (urlRequest);
        } else if (
    e.target == page01Button) {
            
    urlRequest = new URLRequest("page2.swf");
            
    loader.load (urlRequest);
        } else if (
    e.target == page02Button) {
            
    urlRequest = new URLRequest("page1.swf");
            
    loader.load (urlRequest);
        } else {
            
    urlRequest = new URLRequest("page2.swf");
            
    loader.load (urlRequest);
        }


  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    62
    Grazie...issime!

    Mangio qualcosa e provo subito.

    PS: Hai un buon testo da consigliarmi (anche in english va bene) per capire un po' come muovermi in AS3?

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Beh, l'Essential Actionscript 3.0 di Colin Moock è sempre un ottimo testo da cui partire.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.