Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Chiarimenti su codice

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    39

    Chiarimenti su codice

    Ciao,

    sto studiando l'as3 anche guardando codice già fatto ed avrei dei dubbi sul codice seguente:

    codice:
    stage.addEventListener( FullScreenEvent.FULL_SCREEN, check_screen_mode );
    .
    .
    .
    .
    
    function check_screen_mode( fe:FullScreenEvent )
    {	
    	if ( fe.fullScreen )
    	{
    		this.x = Math.floor( stage.stageWidth * 0.5 );
    		this.y = Math.floor( stage.stageHeight * 0.5 );
    		
    	}
    	else
    	ecc...........
    in particolare non capisco che cosa è l'espressione fe (può essere un evento qualsiasi che fa andare lo stage a fullscreen?)

    Poi non capisco a quale oggetto si riferisce il "this.x" e "this.y"

    ciao

  2. #2
    Ciao Gandall,

    il Metodo addEventListener serve ad agganciare un Listener per un Evento ad un Oggetto, in questo modo quando si verifica quel determinato Evento che stavamo aspettando verrà richiamata la Funzione collegata.

    Il contesto più semplice per capire questo meccanismo è il caso in cui vogliamo reagire al Click dell'utente su un particolare pulsante, scriveremo così:
    codice:
    nomePulsante.addEventListener(MouseEvent.CLICK, clickato);
    
    function clickato (me:MouseEvent) {
        ....
    }
    Nell'esempio qui sopra abbiamo un pulsante identificato dal nome nomePulsante e a questo pulstante abbiamo assegnato un Listener per l'Evento del Mouse di tipo Click.
    Quando faremo click su quel determinato Pulsante verrà eseguita la Funzione clickato.

    Allo stesso modo nel tuo codice viene assegnato un Listener per un Evento di tipo fullScreen all'intero Stage, quando lo Stage passerà allo stato Full Screen o quando uscirà dallo stato Full Screen verrà eseguita la Funzione check_screen_mode.

    Tutte le Funzioni richiamate con questo meccanismo ricevono un Parametro e devono essere in grado di gestirlo: nel mio esempio la Funzione clickato riceve un Parametro che ho chiamato me (il nome puoi sceglierlo a piacere) che è un Oggetto di tipo MouseEvent; nel tuo codice la Funzione check_screen_mode riceve un Parametro che si chiama fe (anche qui il nome puoi cambiarlo a piacimento) che è un Oggetto di tipo FullScreenEvent.

    Questo sistema è molto valido perché ci permette di avere, all'interno della Funzione richiamata, un riferimento all'Evento originale che ha fatto partire il comando.
    Nella Funzione clickato dell'esempio qui sopra potrò utilizzare il riferimento me per avere informazioni sull'Evento del Mouse. Nel tuo codice puoi utilizzare il riferimento fe per avere informazioni sull'Evento di visualizzazione.

    L'Evento di tipo FullScreenEvent che stai utilizzando ha una Proprietà chiamata fullScreen, questa Proprietà è un dato di tipo Booleano (vero/falso).
    Quando lo Stage passa alla modalità di visualizzazione Full Screen viene scatenato l'Evento, ma anche quando lo Stage esce dalla modalità Full Screen viene scatenato lo stesso Evento. La differenza tra i due casi sarà proprio il valore della Proprietà fullScreen: nel primo caso troveremo true (vero), nel secondo caso troveremo false (falso).

    Ecco che con un solo Listener siamo in grado di gestire entrambi i casi: quando lo Stage passa a Full Screen la Proprietà fullScreen dell'Evento è true e verrà eseguito il codice all'interno del blocco if, quando lo Stage esce dalla modalità Full Screen il valore della Proprietà fullScreen sarà false e verrà eseguito il codice all'interno del blocco else.

    Passiamo adesso alla parola this.
    this è un riferimento al Contesto in cui si trova, semplicemente significa questo, questa istanza.
    Immagino che le poche righe di codice che hai postato si trovino all'interno di un file .AS che definisce una Classe, all'interno di una Classe la parola this si riferisce all'Istanza che stai utilizzando.

    Per fare un esempio ho bisogno di un contesto più ampio, guarda una Classe di Esempio:
    codice:
    package {
        public class esempioThis {
            public function esempioThis() {
                trace(this);
            }
        }
    }
    Questa Classe non fa altro che scrivere il valore di this nel Pannello di Output. Per utilizzare la Classe qui sopra utilizzaremo un codice simile a quello che segue:
    codice:
    import esempioThis;
    
    var es:esempioThis = new esempioThis();
    Il secondo blocco di codice importa la Classe che ci interessa e poi ne crea un'Istanza (con il comando new).
    Nel momento in cui l'Istanza viene creata viene eseguito il codice all'interno del suo Metodo Costruttore, che si trova nel primo blocco di codice, quindi nel Pannello di Output potremo leggere questo:
    codice:
    [object esempioThis]
    Questo Object esempioThis è proprio l'Istanza appena creata. Dal secondo Blocco di codice possiamo riferirci a questa Istanza utilizzando il nome della Variabile con cui l'abbiamo instanziata es, ma nel primo bloco di codice, visto che ci troviamo proprio all'interno della Classe che definisce l'Oggetto dobbiamo riferirci all'Istanza utilizzando la parola chiave this.

    Spero che questo intervento ti sia utile e che sia facilmente comprensibile.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    39
    Ciao IlProfessore,

    grazie per l'esauriente spiegazione, fortunatamente non sono così alle prime armi,
    per quanto riguarda il parametro fe non riuscivo a capire a quale evento si riferisse anche se avevo intuito come scritto.

    Riguardo al "this" conosco il comando ma materialmente non riesco a capire in quel codice a cosa si riferisce, cioè di quale oggetto va a settare le coordinate?
    Il codice è su timeline e non su file as esterno; cosa dovrei cercare?

    Grazie ciao

  4. #4
    La gerarchia di un SWF inizia dal contenitore principale, che è lo Stage.

    Può esistere un solo Stage e se carichi dei filmati esterni all'interno del tuo progetto, tutti loro condivideranno lo stesso Stage.

    Lo Stage ha un unico Child, questo Child è un Oggetto di tipo MainTimeLine, questo Oggetto è molto simile a MovieClip e rappresenta il contenitore di tutto quello che si trova direttamente sui fotogrammi (sia che tu abbia aggiunto Oggetti tramite codice, sia che tu abbia disegnato direttamente utilizzando gli strumenti di disegno di Flash).

    Quando carichi un Filmato esterno ogni SWF avrà una sua propria MainTimeLine, anche se condividerà lo stesso Stage di tutti i suoi fratelli. Questa MainTimeLine caricata non potrà essere direttamente Child di Stage (perché Stage ha un unico figlio), ma sarà Child di qualche altro DisplayObjectContainer.

    Quando aggiungi un elemento allo Stage, in realtà lo aggiungi alla MainTimeLine, quindi la gerarchia è sempre questa:

    Stage -> MainTimeLine -> Tutto il resto.

    Quando uno Script su un Fotogramma richiama this si sta riferendo alla propria MainTimeLine, i.e. il DisplayObject che contiene tutti i Child disegnati.

    Quindi this è il contenitore di tutto, il figlio unico di Stage, e puoi trattarlo come se fosse un MovieClip, quindi ruotarlo (rotation), spostarlo (x e y), regolarne la visibilità (alpha e visible)... eccetera.

    Non ho mai trovato documentazione per questa Classe, quindi non mi è stato possibile approfondire... penso sia solo una Classe che estende MovieClip, con l'unica differenza di poter stare direttamente sullo Stage.

    Se qualcuno che ci legge ne sa più di me spero che possa intervenire e dirci tutto.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    39
    Quindi se ho capito bene:

    se nella timeline principale ho un solo mc "pippo" che contiene al suo interno altri mc "pippo1", "pippo2", ecc, mettendo nella timeline *del mc "pippo"* quello script significa che:

    - il mc "pippo" verrà centrato rispetto allo stage quando lo stage va in fullscreen
    - gli altri mc "pippo1", "pippo2" all'interno di "pippo" rimarranno nelle loro posizioni relative, cioè le posizioni di uno rispetto all'altro non cambieranno

  6. #6
    Si, praticamente è così, tutti gli elementi si sposteranno assieme perché si sposta il contenitore principale.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    39
    ok grazie per le delucidazioni

    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.