Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    29

    dichiarazioni variabili

    ci risiamo con le domande da neofita..

    la domanda in generale è questa: quando creo con il comando var una variabile, la variabile creata è locale, quindi se la creo dentro una funzione, all'uscita della funzione la variabile è persa. come faccio a dichiarare una variabile dentro una funzione che durerà anche all'esterno?

    nel caso specifico, leggo un nome da un file attravero l'uso di loadVars. il risultato mi serve per poi creare un istanza di una classe che ho creato io, ma se la creo dentro la funzione onLoad all'uscita la variabile non esisterà più.

    il codice:

    tempVar2.onLoad = function() {
    nome = tempVar2.nome;
    ????? _level0.laStanza:Stanza = new Stanza(nome);
    }

    chi mi dà una mano?

    grazie, pietro.

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    penso che la questione sia un'altra nel tuo caso, infatti molto probabilmente non trovi la variabile all'esterno, perchè nel momento in cui la richiami, tale variabile ancora non esiste
    il fatto è che il caricamento dei dati dall'esterno su LoadVars avviene in un momento sconosciuto rispetto a quello della chiamata, e per utilizzare le variabili ricevute è necessario sfruttare l'evento onLoad, che determina il momento in cui il file esterno ha caricato e quindiesistono le variabili, così come avviene ad esempio con il preload di un'immagine che determina il momento in cui l'immagine è caricata e le sue proprietà sono disponibili per la manipolazione

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    29
    grazie per la risposta.

    credo che mi sono spiegato male. non ho problemi ad accedere alla variabile. il problema che ho, è che non so come dichiararla.

    quello che voglio fare è caricare un nome da un file esterno. una volta che il nome è caricato (e quindi viene eseguito l'onLoad), voglio creare un istanza di tipo Stanza (classe che ho creato io).

    se la creo con il metodo classico di dichiarazione (var laStanza:Stanza = new Stanza(nome); ) questa istanza non esisterà all'esterno della funzione onLoad, quindi vorrei capire come a fare a dichiararla in maniera che risieda su _level0.

    ciao e grazie, pietro.

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    in quel caso non ne devi dichiarare il tipo, verrà considerato quello della classe, richiami il "posto" in cui vuoi creare la variabile e la crei con new, ad esempio _level0.laStanza = new Stanza(nome);

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    29
    come al solito mi hai tolto le castagne dal fuoco.

    però mi spieghi perchè devo dichiarare l'istanza in questa maniera? una delle fatiche più grosse che sto incontrando con actionscript è lil modo in cui vanno dichiarate le variabili / istanze e non riesco a trovare da nessuna parte un tutorial che spieghi il tutto.

    ciao, pietro.

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    in AS puoi dichiarare una variabile in tre modi,

    1. con la chiave var, dichiarandone il tipo con i due punti, es: var miaVar:Tipo = new Tipo();
    2. su riferimento di un oggetto senza dichiararne il tipo, ma usando il new dopo l'uguale, es: _level0.miaVar = new Tipo();
    3. attraverso una stringa che fa riferimento ad un determinato oggetto come se si trattasse di un array associativo, es: _level0['miaVar'] = new Tipo();

    nel primo caso lo scope della variabile è locale, ossia la variabile esiste solo nel posto in cui viene dichiarata, ad esempio se viene dichiarata in una funzione, non esisterà all'esterno della stessa

    nel secondo e nel terzo caso la variabile si può reperire da qualsiasi parte perchè ha un riferimento preciso, ovviamente se il posto in cui viene dichiarata è in un evento asincrono, di cui perciò non si conosce il tempo in cui verrà eseguito, è possibile che la variabile fuori da quell'evento non sia definita e fondamentalmente non esista

    ancora una cosa per il terzo caso, è utile quando serve creare nomi composti da variabili, come ad esempio in un ciclo

    Codice PHP:
    for(var i:uint=010i++){
    var 
    s:Sprite = new Sprite();
    s.name 'obj'+i;
    addChild(s);
    }
    for(var 
    j:uint=010j++){
    var 
    t:Sprite getChildByName('obj'+i);
    trace(t.name);


  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    29
    farò tesoro di questo elenco.

    grazie, pietro.

  8. #8
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao..

    Ad integrazione di quanto esposto da and80, volevo indicare un quarto metodo.

    L'utilizzo della proprietà _global rende la variabile visibile in ogni area di validità ed in ogni linea temporale all'interno del tuo filmato.

    Puoi dichiarare la variabile in un qualsiasi punto del tuo filmato
    codice:
    _global.miaVariabile = "variabile globale"
    ..quindi richiamarla da un qualsiasi altro punto senza bisogno di specificare alcun percorso
    codice:
    trace(miaVariabile)
    Fai soltanto attenzione, nel richiamare la variabile, ad anteporre il riferimento _global nel caso in cui hai delle variabili locali con lo stesso nome di quelle globali.

    Per cui indicherai:
    codice:
    trace(_global.miaVariabile)
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  9. #9
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    esatto, non so perchè quando ho scritto l'ultimo post, stavo pensando ad AS3 (infatti il codice di esempio è in AS3), in cui _global è stata rimossa

  10. #10
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Originariamente inviato da and80
    esatto, non so perchè quando ho scritto l'ultimo post, stavo pensando ad AS3 (infatti il codice di esempio è in AS3), in cui _global è stata rimossa

    Pensa che io non sapevo nemmeno che in AS3 è stata rimossa.
    A dire il vero so ben poco di AS3

    Comunque il tuo esempio potrebbe benissimo essere riferito anche ad AS2, benché hai utilizzato metodi proprietari di AS3 e la classe Sprite che potrebbero però far riferimento tranquillamente ad una classe esterna in AS2... e in qualunque caso questo resta irrilevante per la richiesta in oggetto, a meno che Pietro non specifichi di che versione actionScript si voglia trattare

    Pietro, faresti comunque bene a decidere da subito su quale strada vuoi "andare a parare".
    L'AS2 rimane leggermente più "elastico" rispetto ad AS3 che tende maggiormente all'OOP

    Se vuoi stare al passo coi tempi ti consiglio di riversarti direttamente sull'AS3
    Una buona (credo) guida di base la puoi trovare sul sito Adobe: http://livedocs.adobe.com/flash/9.0_...rogramming.pdf

    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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.