Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Event "enterFrame"

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    41

    Event "enterFrame"

    Salve a tutti
    vi espongo il mio problema:
    carico su un movieclip (mc) un filmato swf, con il metodo mc.addChild(loader)
    questo filmato contiene un listener enterFrame

    quando rimuovo il filmato (mc.removeChildAt(0)) il filmato viene effettivamente rimosso, ma non viene cancellato il listener enterFrame al suo interno
    come mai?

    in as2 eliminando un movieclip venivano cancellate anche le sue funzioni interne, in as3 come posso ottenere lo stesso risultato?
    radioH

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    removeChild non elimina il movieclip, lo lo rimuove solo dalla lista di visualizzazione corrente,
    Nel caso di un filmato caricato dall'esterno puoi scaricarlo dal loader che lo ha caricato attraverso la funzione unload().

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    41
    purtroppo non mi funziona

    qui carico il filmato:
    var request:URLRequest = new URLRequest(file_sezione);
    loader.load(request);
    mc_sezione.addChild(loader);

    prima di caricare eseguo:
    mc_sezione.removeChildAt(0)
    effettivamente il mc nn visualizza più niente
    ma continuano a funzionare le funzioni del filmato "cancellato"

    mentra loader.unload() non produce alcun effetto
    radioH

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Dalle tue parole non ho capito cosa succede, vediamo:
    1- carichi un filmato dentro il "loader" che poi attacchi al movieclip "mc_sezione"
    2- al click su un pulsante tenti di scaricare il filmato vecchio usando removeChildAt
    3- tenti di nuovo di caricare un altro filmato con lo stesso codice ma l'enterframe del filmato precedente continua a funzionare

    Questo è quello che ho capito e ti ho dato la soluzione tra il punto 1 e il punto 2, ossia fare l'unload().

    PS. ah se fai il nuovo load sullo stesso loader, non devi neanche fare l'unload perchè il file viene sostituito dal nuovo.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    41
    loader.unload() funziona, nel senso che mi cancella il vecchio filmato
    ma il problema sussiste
    nel vecchio filmato io ho messo un eventListener "enterFrame" all'interno del quale ho messo un trace
    nonostante io esegua l' unload il trace continua a comparire, il che mi fa capire che qualcosa del vecchio filmato continua lo stesso a funzionare
    insomma non viene rimosso tutto
    riesci a capirci qualcosa? io proprio no!

    ps:questo eventListener l'ho messo nella document class del filmato che viene caricato


    grazie cmq di tutto
    radioH

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Vuol dire che probabilmente hai impostato l'enterframe per un elemento "chiamante", tipo ad esempio root o stage.
    Potresti scrivere il codice di "aggancio" dell'enterframe del filmato secondario per far capire meglio la situazione.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    41
    questo il codice che ci interessa del mc che viene caricato:

    public function initTesto(my_index:uint):void {
    my_mc_testo.addEventListener("enterFrame",loopTest o);
    }
    private function loopTesto(e:Event):void {
    trace("s")
    // altro codice
    }

    quando faccio l'unload continuo a ricevere il trace!!!!
    radioH

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    E' un po' complicato, bisognerebbe aggiungere un listener dentro alla document class in cui si trova quel codice (lo puoi aggiungere anche direttamente nel costruttore, dovrebbe andare bene):

    Codice PHP:
    addEventListener(Event.REMOVED_TO_STAGE__removed__);
    // chiuso il costruttore, crei la funzione __removed__
    private function __removed__ (evt:Event):void {
        try {
            
    my_mc_testo.removeEventListener("enterFrame",loopTesto);
        } catch (
    err:Error) {}


  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    41
    ok funziona... ma

    ma è davvero scomodo, ovvero devo tenere conto di tutti gli enterframe che scrivo sul file, oltre a non poterli nidificare dentro altre funzioni :|

    in as2 eliminando il movieclip eliminavo anche tutto il suo contenuto
    non posso credere che non esiste in as3 la stessa possibilità... oppure c'è ma sbaglio qualcosa nel modo in cui carico i filmati?

    cmq grazie, sei stato davvero gentile!
    radioH

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Non sbagli nulla, ma devi considerare che AS2 e AS3 vengono interpretati in maniera molto diversa dal browser e nel secondo caso è il progettista che deve evitare le ridondanze e progettare i lavori in maniera di disperdere il meno possibile il codice e di usare classi ed elementi preposti solo ad un determinato scopo (vedi ad esempio l'enterframe di cui sopra). L'aumento di velocità e di prestazioni ha un prezzo e quel prezzo è appunto una migliore gestione del progetto da parte di chi lo scrive, ma che non si aspetti i miracoli che prima il player doveva compiere per pubblicare e gestire un filmato pieno di errori di concezione.

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.