Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    58

    [AS3] Variabile globale - Problema menù

    Salve a tutti! Ho iniziato a "smanettare" un po' con il nuovo AS3 per creare un sito completamente in Flash CS3. Non ho un background specifico di questo linguaggio ma me la cavo con c e vb...fatto sta che mi sono imbattuto in un problema che magari per qualche addetto ai lavori è una studpidata.. ho creato dei bottoni disposti in orizzontale che creano il menù. Ad ognuno di loro vorrei associare (all'evento click) un ( o una? devo ancora capire il sesso dell'oggetto movie ). In questa movie in pratica si apre il contenuto relativo all'argomento del bottone con un po' di effetti. il problema è che vorrei fare in modo che, quando si schiaccia un altro bottone, si attivi il movie di chiusura del bottone precedentemente aperto e alla fine di questo parta quello nuovo. Nessun problema dicevo io..ho creato una variabile temp (non definita, cioè non ho definito di che classe sia) in modo da memorizzare l'ultimo bottone schiacciato, cosi so sempre quale devo chiudere prima di aprire quello nuovo. Il tutto funzionava correttamente, solo che il codice non aspetta la fine della clip di chiusura prima di far partire quella del bottone appena schiacciato. tutto questo perche ho scritto il codice nel primo frame della timeline, con il codice relativo agli eventi dei bottoni. allora ho detto: faccio partire la clip nuova alla fine della clip di chiusura, cioè faccio partire la nuova clip all'interno della clip di chiusura, richiamando la variabile temp creata nella timeline. il fatto è che tutto questo non funziona, cioè non da errore di compilazione ma è come se la variabile temp sia vuota...io ho dichiarato la variabile temp anche dentro la clip (o movie) di chiusura, ho provato a chiamarla con vari percorsi..ma niente da fare....
    probabilmente ho usato termini un po' grezzi.. ma credo di essere stato abbastanza chiaro sul problema che alla fine si sintetizza in un semplice passaggio di variabile in AS3..
    probabilmente ci sono modi per aggirare il problema.. se ci sono ben vengano ma se mi spiegate un attimo come funziona il passaggio di variabili in AS3 vi sarò grato! ah dimenticavo...ho visto che _global non funziona più in AS3..altrimenti usavo quella classe..
    Grazie a tutti...
    Ciao!!
    Francesco da Verona

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    allora, cerco di rispondere per gradi, perchè non ho capito con precisione come hai gestito la cosa del menu, comunque la chiave sembra essere un problema di percorsi per cui non riesci a consultare la variabile "temp" dove vorresti

    intanto ti rispondo riguardo a questo: "ho creato una variabile temp (non definita, cioè non ho definito di che classe sia)"
    la creazione di un variabile può essere fatta in due modi, uno prevede l'uso della chiave var e l'altro un'associazione diretta ad una classe di tipo dinamica (come ad esempio MovieClip), perciò:

    var temp:String = "test"; // corretto
    root["temp"] = "test"; // corretto

    in entrambi i casi abbiamo creato una nuova variabile o nel secondo caso abbiamo ridefinito la variabile "temp"

    quando definisci una variabile sulla timeline principale, questa è una variabile riferita alla "root", perciò se la devi richiamare dentro la timeline di un movieclip, ti ci riferisci con "root['temp']"

    c'è una terza alternativa che probabilmente nel tuo caso è la più indicata
    puoi utilizzare una classe che contenga una proprietà statica ridefinibile, in modo da essere sicuro al 100% che quella proprietà si riferisca alla classe, perchè per richiamarla saresti sempre costretto a farlo richiamando anche la classe, quindi mettiamo di definire la classe in questo modo:

    Codice PHP:
    package {
        public class 
    VARS {
            private static var 
    __section:String;
            public static function 
    get section ():String {
                return 
    __section;
            }
            public static function 
    set section (s:String) {
                
    __section s;
            }
        }

    nella timeline del tuo filmato puoi definire la proprietà "section" in questo modo
    Codice PHP:
    VARS.section "test"
    e la richiami da qualsiasi parte sempre con VARS.section, ad esempio
    Codice PHP:
    trace(VARS.section); 

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    58
    si in effetti rileggendo il post mi sono accorto che poi molto chiaro non è..
    vabbè cmq io nella timeline avevo semplicemente dichiarato la variabile temp:
    var temp;
    senza dire che tipo fosse..speravo in una dichiarazione dinamica della variabile nel momento della allocazione:
    temp= unavariabilediunaqualsiasiclasse; (nel nostro caso un movie)
    questo credo che sia corretto nella grammatica AS(3?) perche compilava e funzionava ma potrebbe portare a delle disfunzioni..
    proverò a fare riferimento alla root..da quello che ho capito basterebbe richiamare la variabile con
    root['temp'] (ma questo metodo di instradamento con [' '] è specifico di as3?)
    altrimenti procederò al metodo che consigli tu sicuramente più elegante ma in primo approccio piu no-sense per un niubbo dell'argomento come me
    Cmq sicuramente mi serve per capire meglio as3...
    intanto grazie mille..stasera a casa provo e ti faccio sapere!!!
    Saluti e buon pomeriggio!

    Francesco

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    riguardo a root['temp'] non mi sono soffermato perchè è un pò lunga da spiegare, ci provo ugualmente, magari riesco in poche parole

    allora, root è la proiezione dell'istanza della classe che rappresenta la timeline principale, ma è definita come proprietà che restituisce un tipo DisplayObject invece di MovieClip (come in effetti sarebbe)
    siccome la classe DisplayObject non è definita come "dynamic", non è possibile associargli direttamente delle proprietà aggiuntive (la variabile in questione ad esempio)
    infatti se fai root.temp = "test" ottieni un errore nel parsing
    puoi ovviare alla cosa, definendo la variabile root come MovieClip:
    MovieClip(root).temp = "test";
    oppure creare la proprietà come se si trattasse di un array con indice associativo (il che è consentito sia in AS3 che nei precedenti)

    continuo a risponderti per le altre questioni che hai sollevato... un attimo...

  5. #5
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da ingtabby
    io nella timeline avevo semplicemente dichiarato la variabile temp:
    var temp;
    senza dire che tipo fosse..speravo in una dichiarazione dinamica della variabile nel momento della allocazione:
    temp= unavariabilediunaqualsiasiclasse; (nel nostro caso un movie)
    questo credo che sia corretto nella grammatica AS(3?) perche compilava e funzionava ma potrebbe portare a delle disfunzioni..
    nessuna disfunzione in realtà, è corretto... ma attenzione perchè fino a che la variabile non verrà effettivamente associata a tipo, come dichiari nella seconda parte di questo messaggio, risulterà null

    Originariamente inviato da ingtabby
    altrimenti procederò al metodo che consigli tu sicuramente più elegante ma in primo approccio piu no-sense per un niubbo dell'argomento come me
    l'ultimo metodo che ti ho suggerito è un metodo che dal punto di vista procedurale può risultare un tantino macchinoso, ma se consideri lo sviluppo del progetto in un'ottica OOP, è un modo più stabile di concepire il lavoro, perchè hai la sicurezza di non confondere una o più variabili con lo stesso nome, in diverse timeline e rispetti l'impostazione che è stata data all'intero linguaggio riscritto appunto per rispettare meglio gli standard di linguaggi che sviluppano esclusivamente in OOP

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    58
    Grazie mille appena ho un po' di tempo provo a fare come consigli..purtroppo non è il mio lavoro quindi ci posso dedicare solo il tempo libero a casa!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    58
    grande and! si vede che l 80 è un'annata di ferro!
    anche se praticamente morto dopo una giornata di lavoro, fila dal medico allenamento e stress di vedere la roma venir raggiunta dall'Inter in modo indecoroso all'ultimo minuto (tanto sono juventino ) ho provato col metodo semplice a prova di cretino (root) e funziona tutto!!
    Grazie mille ancora!!!

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.