Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 43
  1. #1

    [flash MX]Creazione componenti

    Questa discussione continua da qui

  2. #2
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Cominciamo dal commento sul codice:

    codice:
    #initclip
    
    // Non chiamare una classe Class... :)
    // Chiamala con un nome che:
    // 1. non sia una parola chiave, come lo è Class in flash mx 2004
    // 2. sia un po' esplicativo, ad esempio:
    FaderClass = function ()
    {
    	this.init();
    };
    // l'oggetto prototype della Classe deve essere definito
    // come un nuovo MovieClip, non l'oggetto prototype di ogni
    // istanza. quindi questa riga va fuori, definita una volta sola
    
    FaderClass.prototype = new MovieClip();
    
    // e definisco il metodo enterFrame nella funzione richiamate nel costruttore
    FaderClass.prototype.init = function()
    {
    	// definiscili dentro la funzione init
    	// e usa percorsi relativi
    	this.fadein_btn.onRelease = function()
    	{
    		this._parent.fade_in();
    	};
    	this.fadeout_btn.onRelease = function()
    	{
    		this._parent.fade_out();
    	};
    	this.onEnterFrame = function()
    	{
    		this.fade();
    	};
    };
    // Metodo che setta l'oggetto target del mio componente
    FaderClass.prototype.setObject = function(oggetto)
    {
    	this.oggetto_fade = oggetto;
    };
    
    // metodi che controllano il fade dell'oggetto target
    FaderClass.prototype.fade_in = function()
    {
    	this.start_fade_in = true;
    	this.start_fade_out = false;
    };
    FaderClass.prototype.fade_out = function()
    {
    	this.start_fade_in = false;
    	this.start_fade_out = true;
    };
    FaderClass.prototype.fade = function() {
    	if (this.oggetto_fade._alpha>0 && this.start_fade_out == true) {
    		this.oggetto_fade._alpha -= 5;
    	} else {
    		this.start_fade_out = false;
    	}
    	if (this.oggetto_fade._alpha<100 && this.start_fade_in == true) {
    		this.oggetto_fade._alpha += 5;
    	} else {
    		this.start_fade_in = false;
    	}
    };
    
    // Registro la classe "FaderClass" e la associo al mio componente
    Object.registerClass("FaderSymbol", FaderClass);
    
    #endinitclip

  3. #3
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Ora, senza dover richiamare il metodo setObject, hai la possibilità di passare il parametro automaticamente alla creazione di un'istanza del componente (questo senza il pannello "Component Parameters").

    Togli il componente dallo stage, e scrivi invece come codice:

    codice:
    this.attachMovie("FaderSymbol", "fader", 1, {oggetto_fade: istanza_mc_target});

  4. #4
    Ok

    Gli eventi dei pulsanti li avevo scritti fuori da init clip perchè non ero riuscito a metterli dentro la classe! Dici cmq che è sbagliato anche se funziona?

    Originariamente inviato da negatyve
    Cominciamo dal commento sul codice:
    codice:
    ...
    
    // l'oggetto prototype della Classe deve essere definito
    // come un nuovo MovieClip, non l'oggetto prototype di ogni
    // istanza. quindi questa riga va fuori, definita una volta sola
    
    FaderClass.prototype = new MovieClip();
    
    ...
    questa non l'ho capita bene

    Quindi riepilogando nel metodo di "inizializzazione della classe" bisogna inserire

    - I metodi o eventi relativi ai clip o pulsanti contenuti nel componente
    - tutti gli eventuali metodi di MovieClip ereditati dalla classe *

    * Mi spiegheresti anche il motivo di questo?

  5. #5
    Originariamente inviato da negatyve
    Ora, senza dover richiamare il metodo setObject, hai la possibilità di passare il parametro automaticamente alla creazione di un'istanza del componente (questo senza il pannello "Component Parameters").

    Togli il componente dallo stage, e scrivi invece come codice:

    codice:
    this.attachMovie("FaderSymbol", "fader", 1, {oggetto_fade: istanza_mc_target});
    Funziona!

    mi piace questa discussione

  6. #6
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    >Dici cmq che è sbagliato anche se funziona?

    mah, concettualmente si, dato che comunque sono i medoti della Classe che gestiscono gli oggetti contenuti nell'istanza..

    >questa non l'ho capita bene

    questa riga:

    codice:
    FaderClass.prototype = new MovieClip();
    serve a far ereditare a tutte le istanze della Classe FaderClass tutti i metodi della Classe MovieClip. Ora, dato che tutte le istanze ereditano i metodi tramite l'oggetto prototype, questo può essere sovrascritto, come in questo caso, una sola volta: non ha senso sovrascriverlo ogni volta che viene instanziata un nuovo oggetto..

    >Quindi riepilogando nel metodo di "inizializzazione della
    >classe" bisogna inserire

    non *bisogna* inserire niente, dato che il metodo "init" è solo una prassi diffusa, assolutamente non necessario. potresti scrivere, avendo gli stessi effetti e risparmiando memoria:

    codice:
    FaderClass = function()
    {
    	// definiscili dentro la funzione init
    	// e usa percorsi relativi
    	this.fadein_btn.onRelease = function()
    	{
    		this._parent.fade_in();
    	};
    	this.fadeout_btn.onRelease = function()
    	{
    		this._parent.fade_out();
    	};
    	this.onEnterFrame = function()
    	{
    		this.fade();
    	};
    };
    ma utilizzare un altro metodo (init, comunemente) è meglio come pratica (considerando anche che non "sporchi" la funzione di costruzione)





    >I metodi o eventi relativi ai clip o pulsanti
    >contenuti nel componente

    non è "obbligatorio", è una buona norma, se i metodi gestiscono questi oggetti (solitamente si creano delle Classi per gestire i dati, che ereditano le une dalle altre, e poi una classe finale che gestisce gli oggetti contenuti nell'istanza. ora, non è necessario che vengano definiti lì, ma sempre buona norma che vengano definiti tramite un metodo della Classe, e non al di fuori della sua definizione

    >tutti gli eventuali metodi di MovieClip ereditati dalla classe

    affatto, anzi, il sistema di usare quell'onEnterFrame non è proprio un granchè.. sarebbe meglio utilizzare un setInterval, da impostare solo quando premi i pulsanti, invece che avere un ciclo continuo anche quando non è necessario..

  7. #7
    Originariamente inviato da negatyve
    >I metodi o eventi relativi ai clip o pulsanti
    >contenuti nel componente

    non è "obbligatorio", è una buona norma, se i metodi gestiscono questi oggetti (solitamente si creano delle Classi per gestire i dati, che ereditano le une dalle altre, e poi una classe finale che gestisce gli oggetti contenuti nell'istanza. ora, non è necessario che vengano definiti lì, ma sempre buona norma che vengano definiti tramite un metodo della Classe, e non al di fuori della sua definizione
    Ok, magari poi sul fatto di separare le classi per la gestione dei dati (anche se non ho capito cosa intendi per dati) e la classe per gestire gli oggetti faremo un'approfondimento in futuro?

    Originariamente inviato da negatyve
    >tutti gli eventuali metodi di MovieClip ereditati dalla classe

    affatto, anzi, il sistema di usare quell'onEnterFrame non è proprio un granchè.. sarebbe meglio utilizzare un setInterval, da impostare solo quando premi i pulsanti, invece che avere un ciclo continuo anche quando non è necessario..
    Diciamo però se ad esempio io ho un evento onData però sarebbe opportuno metterlo lì?

    Appunto io non ho capito perchè non funziona se io definisco i metodi ereditati da MovieClip fuori da un metodo della classe stessa in questo modo:

    codice:
    FaderClass.prototype.onEnterFrame = function(){
    ...
    };

  8. #8
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Come no, questa cosa funziona benissimo:

    codice:
    FaderClass.prototype.onEnterFrame = function()
    {
    	this.fade();
    }
    FaderClass.prototype.init = function()
    {
    	// definiscili dentro la funzione init
    	// e usa percorsi relativi
    	this.fadein_btn.onRelease = function()
    	{
    		this._parent.fade_in();
    	};
    	this.fadeout_btn.onRelease = function()
    	{
    		this._parent.fade_out();
    	};
    };
    solo che non è buona pratica...

  9. #9
    Originariamente inviato da negatyve
    Come no, questa cosa funziona benissimo:

    ...

    solo che non è buona pratica...
    Si è vero funziona avevo dimenticato di inserire prototype quando l'avevo provata!

    Per me sarebbe solo un modo di rendere il codice più pulito e distinguere gli eventi (metodi) del clip/componente da quelli della classe...

  10. #10
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    L'inglese lo leggi (e capisci) bene?

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 © 2026 vBulletin Solutions, Inc. All rights reserved.