Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    ..non è proprio così giusto...

    codice:
    var sprite:Sprite=new Sprite();
    addChild(sprite);
    removeChild(sprite);
    trace(sprite);
    sprite=null;
    trace(sprite);
    Non credo che questo funzioni poi così tanto bene..
    Ho fatto dei test...
    codice:
    	public class Main extends MovieClip{
    		private var mc:Clip;
    		public function Main(){
    			mc = new Clip();
    			addChild(mc);
    			trace('Prima di remove '+mc); //Prima di remove [object Clip]
    			removeChild(mc);
    			trace('Dopo di remove '+mc); //Dopo di remove [object Clip]
    			mc=null;
    			trace('Dopo di null '+mc); //Dopo di null null
    		}
    	}
    "Clip" è la classe data come linkage (concatenamento) ad un quadrato verde in libreria..
    Nel file Clip.as ho scritto:
    codice:
    	public class Clip extends MovieClip{
    		public function Clip(){
    			trace('Clip istanziato');
    			this.addEventListener(Event.ENTER_FRAME,Mov);
    		}
    		private function Mov(e:Event):void{
    			trace(this);
    		}
    	}
    Mandato in esecuzione il filmato questo è quello che è uscito in Output:
    codice:
    Clip istanziato
    Prima di remove [object Clip]
    Dopo di remove [object Clip]
    Dopo di null null
    [object Clip]
    [object Clip]
    [object Clip]
    [object Clip]
    [object Clip]
    [object Clip]
    [object Clip]
    [object Clip]
    [object Clip]
    [object Clip]
    Dove [object Clip] si ripete all'infinito..

    Fate le vostre considerazioni...
    Il problema è abbastanza serio in quando in molte applicazioni certe classi, ad esempio, gestiscono griglie fotografiche con all'interno parecchi MovieClip e Listeners ed il fatto che per eliminare l'eccesso di calcoli e spazio in memoria bisognerebbe andare a eliminarli uno per uno oltre che essere un palla colossale significherebbe che da qui in avanti ogni applicazione dorebbe essere costruita con dei vettori, o altro, che tengono conto di tutto ciò che può essere eliminato...
    Se qualcuno è riuscito a risolvere il problema alla radice vi prego rispondete..


  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Il thread è vecchio di un anno, meglio che ne apri uno nuovo, oppure posso dividere il messaggio che già hai scritto qui e renderlo una nuova discussione con un rimando a questa per comprendere meglio.

  3. #3
    Va bene.. dividi il messaggio che ho scritto per renderlo una nuova discussione...penso sia la cosa migliore..

    Complimenti per la tempestività...

    Spero tu possa aiutarmi anche nella risoluzione del problema.. :master:

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ok, ricapitolando il problema deriva dal fatto che in AS3 pare non esistere un modo efficace di eliminare un displayobject in maniera definitiva dal filmato.
    Ora non ho fatto più prove in tal senso, ma considerato il codice proposto posso pensare che la funzione che mandi in enterFrame a partire dalla classe, venga mantenuta in memoria con i valori presi inizialmente dalla classe stessa.

    Diciamo che il problema potrebbe ridursi al nulla, se oltre ad avere l'accortezza di rendere il riferimento al clip uguale a null, si eliminino anche le pendenze come l'enterFrame direttamente dalla classe aggiungendo un listener per quando si rimuove il clip dalla display list di un contenitore.

    Non riesco a fare subito dei test, ma un codice potrebbe essere questo:

    Codice PHP:
    public class Clip extends MovieClip{
            public function 
    Clip(){
                
    trace('Clip istanziato');
                
    this.addEventListener(Event.ENTER_FRAME,Mov);
                
    this.addEventListener(Event.REMOVEDremoved);
            }
            private function 
    Mov(e:Event):void{
                
    trace(this);
            }
            private function 
    removed (e:Event) {
                
    e.target.removeEventListener(Event.REMOVEDremoved);
                
    e.target.removeEventListener(Event.ENTER_FRAMEMov);
            }
        } 

  5. #5
    Grandee..Grazie Mille..

    Questo Listener mi mancava...

    Farò delle prove..

    Penso comunque che a questo punto ogni volta che creo una Classe, dovrò pensare ad organizzare tutti i Listener ed i movieClip in maniera da poterli rimuovere tutti al richiamo del "Event.REMOVED"..

    Un po' mi spaventa perchè considerando il fatto che all'interno di una classe mi creo svariate altre classi immagino che dovro prevedere per ognuna di esse un metodo che pensa alla loro eliminazione..

    P.s. Se ho tre displayobject uno dentro l'altro e rimuovo quello che contiene gli altri due,
    a questi altri il listener "Event.REMOVED" si attiva??

    (Spero di non essere stato troppo contorto)

    Ciaoooooo

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Sì, l'evento REMOVED funziona ogni volta che rimuovi un displayobject dalla sua display list di appartenenza.
    Per quanto riguarda tutta la questione del rimuovere, eliminare ecc, una buona progettazione iniziale potrebbe levarti dei dolori più avanti, quando ti ritroveresti invece a combattere con situazioni particolari, come quella che ad esempio abbiamo affrontato.
    Nei progetti che ho affrontato finora con AS3 difficilmente ho riscontrato rallentamenti o qualcosa che non andasse nè in test nè nel reale utilizzo.
    Prendi ad esempio in considerazione la questione dell'enterFrame, a seconda delle azioni che questo deve effettuare, puoi utilizzare direttamente un movieclip esterno, preposto solo all'uso del suo enterFrame, oppure puoi stabilire all'interno della stessa funzione una condizione per cui, quando un determinato fattore smette di essere tale, l'enterFrame si blocca da solo.
    Comunque bene o male quello dell'enterFrame è l'unico evento che può causare situazioni particolari all'interno dello stesso filmato, mentre altri eventi sono tranquillamente ignorabili se il displayobject a cui sono associati non si trova più sullo stage.

  7. #7
    Capisco...
    Grazie mille per i suggerimenti..

    Ora farò i test del caso per avere il quadro completo..

    Ciaoooooooo

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.