Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [as2] rimuovere un swf

  1. #1

    [as2] rimuovere un swf

    Buongiorno,
    il mio problema è il seguente, ho un sito in flash con all'interno un movieclip da cui carico un'altro swf esterno, si tratta di un carosello che ho scaricato online (flashmo, di Lee Brimelow). Ora vorrei che dalla funzione "t.fm_button.onRelease = function()" il carosello si rimuovesse per tornare al primo swf. Sono alle prime armi con as2, portate pazienza.
    Il carosello si carica sopra al primo swf, ed è ciò che voglio, poi cliccando su qualsiasi foto del carosello, vorrei che sparisse. Associato al carosello si trova un xml con i percorsi delle foto, posso postarlo se serve.

    ///
    Questo è come carico il carosello dal primo swf.
    ///

    var loadedSWF:Loader = null;

    /**
    * Loads an SWF and adds it to container once complete
    * @param file The URL to the SWF to load
    * @param container The container to add the SWF to
    */
    function loadSWF(file:String, container:MovieClip=null):void
    {
    if(container == null) container = MovieClip(root);

    // removes the previously loaded SWF
    if(loadedSWF != null)
    {
    if(loadedSWF.parent) loadedSWF.parent.removeChild(loadedSWF);
    }

    var req:URLRequest = new URLRequest(file);
    loadedSWF = new Loader();
    loadedSWF.load(req);

    addChild(loadedSWF);

    loadedSWF.x = -72; //coordinate caricamento swf
    loadedSWF.y = -220;
    }

    //

    btn_gallAI1112c.addEventListener(MouseEvent.CLICK, _click);
    function _click(e:MouseEvent):void
    {
    loadSWF("flashmo_057_carousel_xml.swf");
    }

    ////
    questo è lo script del carosello
    ////

    // Code Credit: Lee Brimelow
    // Tutorial Reference URL: www.gotoandlearn.com
    // Modified by www.flashmo.com
    stop();
    var total:Number;
    var radiusX:Number = 1500;
    var radiusY:Number = 10;
    var centerX:Number = 550;
    var centerY:Number = 75;
    var speed:Number = 0.005;
    tn_group_mc._visible = false;
    fm_label.text = ""; fm_url.text = "";

    var xml:XML = new XML();
    xml.ignoreWhite = true;

    xml.onLoad = function()
    {
    var nodes = this.firstChild.childNodes;
    total = nodes.length;

    for( var i=0; i < total; i++)
    {
    var t = tn_group_mc.duplicateMovieClip("tn"+i, i);
    t.angle = i * ((Math.PI*2)/total);
    t.onEnterFrame = mover;
    t.tn_mc.inner.loadMovie(nodes[i].attributes.filename );
    t.tn_reflection_mc.inner.loadMovie(nodes[i].attributes.filename );
    t.fm_label = nodes[i].attributes.label;
    t.fm_url = nodes[i].attributes.url;

    t.fm_button.onRollOver = function()
    {
    fm_label.text = "" + this._parent.fm_label;
    fm_url.text = "URL: " + this._parent.fm_url;
    }
    t.fm_button.onRollOut = function()
    {
    fm_label.text = "";
    fm_url.text = "";
    }
    t.fm_button.onRelease = function()
    {
    getURL(this._parent.fm_url);
    }
    }
    }
    xml.load("flashmo_thumbnails.xml");

    function mover()
    {
    this._x = Math.cos(this.angle) * radiusX + centerX;
    this._y = Math.sin(this.angle) * radiusY + centerY;
    var s = this._y /(centerY+radiusY);
    this._xscale = this._yscale = s*100;
    this.angle += this._parent.speed;
    this.swapDepths(Math.round(this._xscale) + 100);
    }
    this.onMouseMove = function()
    {
    speed = (this._xmouse-centerX) * 0.0001;
    }

  2. #2
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Il codice di caricamento del carosello è ActionScript 3.0 mentre il carosello è ActionScript 2.0.

    Mi sembra che stai combattendo una battaglia persa in partenza, potrei sbagliarmi ma se il filmato (carosello) per essere rimosso da un filmato che lo contiene è in AS 3.0 richiede un removeChild posizionato nel 'contenitore' stesso, non puoi richiamarlo da un filmato in AS 2.0.

  3. #3
    Ti ringrazio della risposta. Girando per i forum ho avuto il sospetto che il mio problema fosse questo, quindi l'unica soluzione è creare un nuovo movieclip visibile sul primo swf che lo scarichi? Tenendo conto dello script che carica il carosello, mi potresti suggerire lo script da inserire per rimuoverlo?

  4. #4
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Nel filmato "caricatore" servirebbe un pulsante che al Click chiama una funzione che rimuove il filmato caricato e questo pulsante dovresti aggiungerlo allo stage insieme al filmato caricato altrimenti, se venisse cliccato quando il carosello non è ancora presente, si genera un errore.

    Il codice AS 3.0 da assegnare al pulsante:

    Codice PHP:
    pulsante.addEventListener(MouseEvent.CLICKrimuoviSWF);

    function 
    rimuoviSWF(evento:MouseEvent):void
    {
        
    removeChild(loadedSWF);

    Per fare in modo che il pulsante sia aggiunto allo stage solo quando il filmato carosello è presente, potresti importarlo dalla libreria quando serve oppure posizionarlo fisicamente sullo stage e settarlo su visible = false a inizio codice:

    pulsante.visible = false;
    Subito dopo l' addChild(loadedSWF) lo imposti su true:
    pulsante.visible = true;
    Per poi riportarlo su visible = false quando fai il removeChild.

    Considera che ho testato il tutto (in locale non in rete) su un filmato AS 3.0 che carica una galleria .xml in AS 2.0 e tutto sembra funzionare correttamente.
    Ho dovuto cambiare gli indirizzi delle immagini sull' .xml e nel codice AS 2.0, l'indirizzo dell' .xml perchè anche se le 'chiamate' vengono fatte dal filmato caricato una volta che questo è aggiunto al filmato caricatore risulta essere su un livello superiore e non trova i file richiesti.
    Per capire bene come risolvere bisognerebbe vedere come è strutturato il tutto.

    ciao

  5. #5
    Per il momento ti ringrazio veramente tanto, spero di postare al più presto la soluzione al mio problema, magari potrà essere di aiuto ad altri.

  6. #6
    Grazie ancora Sleter, ho risolto con i tuoi suggerimenti, di seguito il codice dei due movieclip per caricare e scaricare l'swf esterno. Ho un'altro problema da sottoporti; quando carico la prima volta l'swf esterno tutto va bene, ma se dopo averlo chiuso lo riapro, capita che le immagini in secondo piano si sovrappongano a quelle in primo piano, come mai? Non ho modificato lo script del carosello. Questo problema mi capitava anche prima di inserire le tue modifiche. Per intenderci, carico l'swf esterno e tutto va bene, ma se chiudo e riapro nella stessa "sessione" mi da quel problema, mentre se chiudo il browser e riapro torna tutto liscio.

    codice:
    var loadedSWF:Loader = null;
    pulsante.visible = false;
    /**
     * Loads an SWF and adds it to container once complete
     * @param file The URL to the SWF to load
     * @param container The container to add the SWF to
     */
    function loadSWF(file:String, container:MovieClip=null):void
    {
        if(container == null) container = MovieClip(root);
    
        // removes the previously loaded SWF
        if(loadedSWF != null)
        {
            if(loadedSWF.parent) loadedSWF.parent.removeChild(loadedSWF);
        }
    
        var req:URLRequest = new URLRequest(file);
        loadedSWF = new Loader();
        loadedSWF.load(req);
    
        addChild(loadedSWF);
    pulsante.visible = true;
    	
    	loadedSWF.x = -72; //coordinate caricamento swf
    	loadedSWF.y = -220;
    }
    
    //
    
    btn_gallAI1112c.addEventListener(MouseEvent.CLICK, _click);
    function _click(e:MouseEvent):void
    {
        loadSWF("flashmo_057_carousel_xml.swf");
    }
    
    //
    
    pulsante.addEventListener(MouseEvent.CLICK, rimuoviSWF);
    
    function rimuoviSWF(evento:MouseEvent):void
    {
        removeChild(loadedSWF);
    	pulsante.visible = false;
    }

  7. #7
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ciao

    Nella funzione "rimuoviSWF" prova ad aggiungere dopo il removeChild(loadedSWF):

    loadedSWF = null;

    Questo dovrebbe cancellare completamente il caricacamento precedente dalla memoria del FlashPlayer.

  8. #8
    Grazie ancora del tuo tempo, dopo le tue modifiche il caricamento e scaricamento del'swf esterno è molto più fluido, ma il problema rimane. E' strano perchè succede in modo casuale, a volte carica le foto in secondo piano completamente sopra a quelle in primo, altre volte si sovrappongono anche solo per 1 secondo, la maggior parte delle volte però carica bene. Per essere preciso nello script del carosello ho cambiato la grandezza del pulsante per farla combaciare con le immagini che inserisco. Può darsi sia questo? Nel'swf originale di Lee Brimelow non succede mai. Forse il fla del carosello ti potrebbe aituare...http://www.flashmo.com/preview/flash..._carousel_xml. Volendo ti posso postare il mio fla modificato del carosello. Ciao

  9. #9
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ti ho inviato un messaggio privato con il mio indirizzo Skype.

    Ho scaricato il carosello e l'ho testato importandolo in un file in AS 3.0.
    Ho creato il pulsante che lo carica e il pulsante che lo rimuove e funziona tutto correttamente.

    Il codice del filmato contenitore (AS3) è questo:

    Codice PHP:
    var carico:Loader;

    pulsanteLoad.addEventListener(MouseEvent.CLICKcaricaSWF);
    pulsante.addEventListener(MouseEvent.CLICKrimuoviSWF);

    function 
    caricaSWF(evento:MouseEvent):void
    {
        
    carico  = new Loader  ;
        
    carico.load(new URLRequest("flashmo_057_carousel_xml.swf"));
        
    addChild(carico);
    }
    function 
    rimuoviSWF(evento:MouseEvent):void
    {
        
    removeChild(carico);
        
    carico null;

    Non credo che il tuo problema sia causato dalle modifiche sulle dimensioni del pulsante e penserei piuttosto a qualcosa che non và nel codice di caricamento in AS3.
    Se non riesci a risolvere inviami il tutto e vedo se riesco ad aiutarti.

    ciao

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.