Flash Gallery | Flash Templates | Flash Menu | Flash Design | Flash Audio & Video

Video Corsi Actionscript 3.0


+ Reply to Thread
Results 1 to 9 of 9

Thread: Usare un metodo di una classe in un'altra

  1. #1
    Junior Member Settled In trazdum is on a distinguished road
    Join Date
    Sep 2008
    Posts
    4
    Rep Power
    0

    Usare un metodo di una classe in un'altra

    amazing Flash templates
    Ciao a tutti, ringrazio anticipatamente chiunque riesca a darmi una mano perchè son veramente impantanato!! Ho un po' cercato in giro sul forum ma non ho trovato niente che risponda esattamente a questa domanda, se per caso sapete dov'è indicatemela.

    Ho una classe che ho chiamato PannelloVideo che è per ora semplicemte un mc che conterrà un video, è pubblica e ha due semplicissimi metodi Visibile e Invisibile che fanno esattamente quello che dicono e tutto funziona perfettamente. Il pannello video è istanziato nel flash.
    Ho un'altra classe sempre pubblica che si chiama BottoneGruppo, che non è altro che un gruppo di bottoni che si disattivano tra di loro.
    Vorrei richiamare il metodo Visibile Invisibile da BottoneGruppo, ma mi da errore 1180: Call to a possibly undefined method Visible

    Non riesco a capire dove sta l'errore (sicuramente concettuale) mannaggia

  2. #2
    Member Flash Addict Kaneda is on a distinguished road
    Join Date
    Jan 1970
    Posts
    90
    Rep Power
    41

    Re: Usare un metodo di una classe in un'altra

    Per chiamare una funzione di una classe da un'altra, i modi mediamente sono due:

    1) chiami la funzione da un'istanza della classe

    2) dichiari la funzione come statica

    Un esempio del primo metodo è:

    Classe A vuole chiamare la funzione faiQualcosa() dichiarata nella Classe B.

    Dentro la Classe A ti devi creare un'istanza della classe B: var classeB:ClasseB = new ClasseB(); e poi accedere alla funzione con classeB.faiQualcosa(); ... la funzione faiQualcosa deve essere dichiarata come pubblica ovviamente.

    Un esempio del secondo metodo è:

    Classe A vuole chiamare la funzione STATICA faiQualcosa() dichiarata nella Classe B.

    Semplicemente dalla Classe A basta chiamare ClasseB.faiQualcosa();
    Ovviamente dentro classe B la funzione deve essere dichiarata come statica ovvero:
    static public function faiQualcosa()

    Una funzione dichiarata come statica è accessibile ovunque semplicemente chiamando la classe stessa e non un'istanza.
    Per farti capire, un'esempio classico è la classe Math. Quando usi i metodi round, floor, ceil ecc li chiami da Math.round, Math.ceil ecc ... quindi direttamente dalla classe stessa.

    Spero che il tutto sia chiaro e comprensibile :)

  3. #3
    Member Flash Addict Kaneda is on a distinguished road
    Join Date
    Jan 1970
    Posts
    90
    Rep Power
    41

    Re: Usare un metodo di una classe in un'altra

    Ho problemi con l'edit ... vabbè integro di seguito.

    Tornado al tuo esempio, se da BottoneGruppo non hai interesse a crearti un'istanza di PannelloVideo (perchè non ti serve) allora probabilmente ti conviene dichiararti i due metodi come statici:

    static public function Visibile():void
    {
    trace("sono visibile!");
    }

    che richiamerai con PannelloVideo.Visibile();

  4. #4
    Junior Member Settled In trazdum is on a distinguished road
    Join Date
    Sep 2008
    Posts
    4
    Rep Power
    0

    Re: Usare un metodo di una classe in un'altra

    Ciao Kaneda, grazie per la risposta e per il tuo tempo.
    Penso di aver capito la teoria, ma cmq mi si incastra tutto, con entrambe le soluzioni, ma forse ho ommesso qualcosa. Vediamo di riprendere a spiegare la situazione.

    ho il mc scheda_big con dentro il mc che ho chiamato pannello, che altro non è che la mia istanza di PannelloVideo (ho creato la classe su questo mc).
    Ho provato a fare come dici nel primo caso, ho provato in varie maniere ma mi da errori diversi a seconda delle versioni:
    prima ho dichiarato la var nel BottoneGruppo così
    var PannelloVideo:PannelloVideo = new PannelloVideo()
    e poi così
    var scheda_big.pannello:PannelloVideo = new PannelloVideo()
    ma in entramdi i casi mi da errore

    Ho provato allora con la seconda soluzione ma mi da errore quando dentro al metodo Visibile gli dico this.visibile = true
    1042: the this keyword can not be used in static methods. It can only be used in instance methods, function closures, and global code

    Mi sa che mi son perso qualcosa

  5. #5
    Member Flash Addict Kaneda is on a distinguished road
    Join Date
    Jan 1970
    Posts
    90
    Rep Power
    41

    Re: Usare un metodo di una classe in un'altra

    Bhè ti sei perso che l'istanza di PannelloVideo cel'hai già, dato che è un oggetto visuale sullo stage.
    L'esempio del primo metodo presuppone che l'oggetto non sia presente nella displayList (appunto si crea un'istanza) mentre nel tuo caso questa condizione è già soddisfatta.

    Fai semplicemente scheda_big.pannello.Visibile();

    Per quanto riguarda l'errore nella funzione statica, come ti dice il debbuger, non si può usare "this" in una funzione statica, proprio perchè non ha senso e flash non trova nessun riferimento venendo la funzione chiamata direttamente dalla classe e non da un'istanza della stessa.

  6. #6
    Junior Member Settled In trazdum is on a distinguished road
    Join Date
    Sep 2008
    Posts
    4
    Rep Power
    0

    Re: Usare un metodo di una classe in un'altra

    Ciao Kaneda, grazie mille per tutto il tempo dedicato, forse son riuscito a trovare la soluzione, ma per capirla ho sudato parecchio, perche avevo piazzato errori concettuali un po' ovunque!!
    Mi sa che ho fatto il passo più lungo della gamba ad iniziare a programmare cose "complicate" in as3-oggetti senza avere le conoscenze di base adeguate. Devo partire dalla base.
    Mi perdevo in un bicchier d'acqua! Se è vero che as3 è molto più rigoroso e pulito è anche più difficile fare programmazione "raffazzonata" e tutta l'applicazione dev'essere ben strutturata, cosa che io non avevo assolutamente fatto.
    Cmq ... un altro tassello di programmazione.
    Grazie ancora

  7. #7
    Member Flash Addict Kaneda is on a distinguished road
    Join Date
    Jan 1970
    Posts
    90
    Rep Power
    41

    Re: Usare un metodo di una classe in un'altra

    Prego non c'è di che, anche io non è molto tempo che sono passato al 3.0 e, come dici giustamente tu, al dilà delle differenze sintattiche quello che cambia è proprio il modo di porsi rispetto ad un progetto.
    Anche io ero, giocoforza, un fan della porgrammazione a "pecetta" ... da quando però prendi confidenza con la OOP ti rendi conto che la fase progettuale è fondamentale e più tempo impieghi a farla più andrai fluido e liscio quando scriverai codice.

    Come dici giustamente tu è meglio "perdere tempo" a capire bene le basi, magari facendo cose stupide ma che ti facciano capire concretamente certi concetti fondanti e poi, pian pianino, addentrarti sempre di più in AS3.
    Da quando mi sono messo di impegno a studiare AS3 ci ho messo circa 3 settimane prima di migrare una mia applicazione dal 2.0 al 3.0 (e ci ho messo un sacco di tempo a farlo) .... quindi pazienta che è un processo che richiede tempo. Alla fine ti dà però gran belle soddisfazioni.

  8. #8
    Junior Member Settled In mikelin is on a distinguished road
    Join Date
    Mar 2009
    Posts
    17
    Rep Power
    0

    Re: Usare un metodo di una classe in un'altra

    Intanto complimenti...premette che come voi sona anche io alle prime armi con OOR as3
    e stavo cercando qualcosa di simile .. ma con una iterazione maggiore tra due classi e le loro variabili e loro metodi .
    Avevo pensato di usare questo procedimento per poter creare un menu primcipale e dei sottomenu diversi a secondo della situazione che mi si presenta ..
    Per il momento stavo cercando dei esempi, o provato a fare qualche prova come spiegato soltanto che dichiarandola statica posso si richiamare la funzione da un altra classe ma non mi va a modificare ad esepio di proprieta dell'oggetto, tipo la sua posizione sullo stage.
    spero di essermi spiegato
    Grazie

  9. #9
    Member Flash Addict Kaneda is on a distinguished road
    Join Date
    Jan 1970
    Posts
    90
    Rep Power
    41

    Re: Usare un metodo di una classe in un'altra

    In realtà dipende sempre da cosa vuoi fare.
    Le classi statiche sono comode per immagazzinare informazioni oppure operazioni che, all'occorrenza, vengono richiamate.
    Di solito però queste classi sono "astratte", nel senso che non sono legate ad oggetti visuali che hai sullo stage.
    Un'esempio è la classe Math che implementa tutti metodi statici (difatti usi i suoi metodi quando devi fare operazioni matematicheù).
    Nel tuo caso se vuoi creare un menu non ha senso che usi classi statiche, ma ti farai una o più classi per i tuoi elementi visuali del menù, che andrai poi ad istanziare e manipolare (cambiandone appunto la posizione o quant'altro, tramite getter e setter).

+ Reply to Thread

Similar Threads

  1. eliminare ENTER_FRAME presente in un'altra classe
    By shining in forum Actionscript 3.0 base
    Replies: 14
    Last Post: 18-09-09, 10:04
  2. Come chiamare un'altra Classe dalla Document Class
    By Flep in forum Articoli e tutorials
    Replies: 37
    Last Post: 24-10-08, 11:53
  3. accedere a un metodo di documentclass da un classe legata a movieclip
    By boxbuilder in forum Actionscript 3.0 avanzato
    Replies: 4
    Last Post: 07-07-08, 16:11
  4. Metodo splice della classe Array
    By Flep in forum Articoli e tutorials
    Replies: 1
    Last Post: 18-06-08, 22:51
  5. indexOf - metodo della classe Array
    By Flep in forum Articoli e tutorials
    Replies: 2
    Last Post: 12-06-08, 19:26

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Optimization by vBSEO