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

    Caricare swf esterno in AS3 dubbi

    Ciao a tutti,

    premetto che sono ancora ancorata ad AS2 e non riesco a comprendere cose ovviamente banali, ma ho bisogno che qualche anima pia cerchi di spiegarmi la logica che sta dietro a questa piccola istruzione per il caricamento di un swf esterno (presa dalle guide di HTML):

    var carica:Loader = new Loader();
    carica.contentLoaderInfo.addEventListener(Event.CO MPLETE, fineCaricamento)
    function fineCaricamento(loadEvent:Event) {
    addChild(loadEvent.currentTarget.content);}
    carica.load(new URLRequest("bottoni_eventi.swf"))

    Ovviamente io in AS2 sono abituata ad utilizzare semplicemente
    loadMovieNum("pulsante.swf", 0);
    quindi trovo un po' di difficoltà a capire bene il tutto. Comunque provo a fare un po' di domande così da ridurre un po' il campo.

    Nella riga 1 viene creato un nuovo oggetto della classe loader di nome "carica", perchè non viene semplicemente scritto "var carica = new Loader();" ?

    Perchè nella riga 2 la proprietà "contentLoaderInfo" viene definita in "Event.COMPLETE" e non semplicemente con "COMPLETE"?

    La 4 riga capisco che specifichi dove caricare l'swf definito in seguito, ma al lato pratico non ho capito nulla del costrutto...

    In ogni caso non ho molto ben chiaro il perchè di tutto questo caos nel fare qualcosa che prima era estremamente semplice da realizzare aiutoooo

    Ciao e grazie
    Patz

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Parto dal dirti che per una scelta ben precisa e, se ci pensi anche chiara, i _level in AS3 sono stati eliminati in favore di una più radicata programmazione ad oggetti. Quindi in pratica è stato scelto di utilizzare una sola classe per caricare immagini e swf esterni, la classe Loader.
    Nel codice che commenti in particolare è stato scelto di agganciare l'swf caricato direttamente alla timeline, ma nessuno ti impedisce di lasciare il file dentro al Loader e visualizzare quello nella timeline principale. Quindi volendo con due righe potresti caricare e visualizzare il tuo file esterno.

    Codice PHP:
    var loader:Loader addChild(new Loader()) as Loader;
    loader.load(new URLRequest("bottoni_eventi.swf")); 
    Ora torniamo al codice e alle tue richieste specifiche:

    >> Nella riga 1 viene creato un nuovo oggetto della classe loader di nome "carica", perchè non viene semplicemente scritto "var carica = new Loader();" ?

    E' un aspetto risalente ad AS2 ma che nessuno pare avere mai applicato (...) e si tratta dello strict data typing ossia della condizione imposta ad una determinata variabile di essere solo di un tipo, in questo caso Loader, e si applica con var all'inizio e i due punti e l'assegnazione dopo.


    >> Perchè nella riga 2 la proprietà "contentLoaderInfo" viene definita in "Event.COMPLETE" e non semplicemente con "COMPLETE"?

    Qui c'è un attimo di confusione e il discorso si sposta verso una direzione più ampia, per il momento lo lasciamo da parte e vediamo prima il resto.


    >> La 4 riga capisco che specifichi dove caricare l'swf definito in seguito, ma al lato pratico non ho capito nulla del costrutto...

    Non so se per la quarta riga ti riferisci a questa: addChild(loadEvent.currentTarget.content);
    In questo caso è come ti dicevo prima, è stata solo una scelta in quello script, in pratica a caricamento avvenuto si è deciso di visualizzare l'swf caricato nella timeline principale.

  3. #3
    Sei stato chiarissimo e gentilissimo!!!!!

    Grazie mille
    Patz

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ok, perfetto.
    Torniamo ora a questo:

    >> Perchè nella riga 2 la proprietà "contentLoaderInfo" viene definita in "Event.COMPLETE" e non semplicemente con "COMPLETE"?

    Sempre in AS3 si è scelto di aumentare il numero di classi per diminuire il carico sulle azioni di ogni classe. Così per quanto riguarda le informazioni sui caricamenti esterni è stato scelto di delegarli alla classe LoaderInfo
    Questa classe è presente come proprietà contentLoaderInfo nella classe Loader e deve intervenire sulla gestione degli eventi di caricamento, tra i quali spunta nel nostro caso l'evento COMPLETE.
    Ora la scelta di scrivere Event.COMPLETE piuttosto che "complete", deriva da una gestione imparata su altri linguaggi per cui quando ci sono nomi definiti si preferisce delegarli a costanti statiche di classi che sono direttamente interessate nella gestione dell'evento, perciò ad esempio avremo Event.COMPLETE, IOErrorEvent.IO_ERROR, ProgressEvent.PROGRESS che equivalgono a scrivere delle stringhe rappresentative di un determinato evento.

    Nessuno quindi ti vieterebbe di scrivere:

    Codice PHP:
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener("complete"completeHandler);
    function 
    completeHandler (evt:Event):void {
        
    // azioni a caricamento avvenuto

    Per assurdo e perdendo in leggibilità potresti anche scrivere la riga:

    Codice PHP:
    loader.contentLoaderInfo.addEventListener("complete", function (evt:Event):void /* azioni a caricamento avvenuto */ }); 

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.