in Flash MX se volevo aggiungere un metodo personalizzato ad una classe preesistente facevo:
se la stessa cosa la volevo fare per una classe preesistente tipo la classe MovieClip seguivo la stessa procedura, con la possibilità di creare metodi che sfruttassero gli eventi associati alla classe in questione, quindi ad esempio:codice:MyClass.prototype.customMethod = function(){ // azioni };
Ieri sera guardando per la prima volta il nuovo AS ho visto che per creare una classe e quindi i propri metodi si crea il file esterno .as con il medesimo nome della classe che contiene la dichiarazione della classe ed il costruttore, quindi:codice:MovieClip.prototype.customMethod = function(){ this.onEnterFrame = function(){ // azioni }; };
e fino qui non ci piove. Se voglio aggiungere funzionalità personalizzate alle classi preesistenti, ad esempio alla classe MovieClip in teoria la procedura è la seguente:codice:class MyClass{ private var myName:String; // esempio di costruttore function MyClass(theName:String){ this.myName = theName; } // esempio di metodo function showName(){ trace(this.myName); } }
Ma ho notato che se io non istanzio la classe in pratica non riesco ad assegnare nessun nuovo metodo alle clip filmato presenti nel mio movie e in ogni caso, anche istanziando la sottoclasse non riesco ad avere nessun riferimento alla MovieClip che richiama i suoi metodi, quindi non riesco nemmeno ad assegnare delle azioni su un evento, tipo enterFrame.codice:class CustomMC extends MovieClip{ // costruttore // metodi }
Ad esempio:
qualcuno ha già affrontato il problema? Avete la soluzione? Sicuramente è una stupidaggine ma da ieri sera non ho ancora trovato la via migliore per capire come sbloccare il mio ragionamento.codice:class CustomMC extends MovieClip{ // costruttore function customMethod = function(){ trace(this); // mi ritorna undefined; this.onEnterFrame = function(){ // azioni --> questo evento non viene preso in considerazione poiché non ho nessun riferimento all'istanza MovieClip che richiama il metodo customMethod. }; } }


Rispondi quotando