chi e' cosi' gentile da spiegarmi i prototipi in actioscript?
che fa questa funzione?
MovieClip.prototype.loader
![]()
Grazie
chi e' cosi' gentile da spiegarmi i prototipi in actioscript?
che fa questa funzione?
MovieClip.prototype.loader
![]()
Grazie
Trinity
http://www.vocabolariodidio.it
http://www.giulianodelena.com
trova la tua casa per le vacanze
http://www.salento.lecce.it
Le prototype sono fondamentalmente funzioni. L'unica differenza che risiede tra le prototype e le funzioni, sono che le prototype non si dichiarano dentro un istanza o dentro un oggetto ma si dichiarano per estendere la classe dell'oggetto.
Mi spiego meglio.
![]()
In flash esistono diverse classi di oggetti, ad esempio le classi:
MovieClip
Sound
Object
String
queste sono a tutti gli effetti classi di oggetti.
Per capire la differenza tra classi e oggetti possiamo dire che possiamo avere sullo stage 500 clip ma tutti appartengono alla classe "MovieClip". Quindi l'oggetto è un singolo elemento, la classe è la collettività. Ora sappiamo tutti che una classe e i suoi oggetti possono avere delle funzioni che un altre classi non possono avere, per esempio:
MovieClip.play();
dove "play" è una funzione dell'oggetto della classe MovieClip che NON può esistere per gli altri oggetti: chi scriverebbe mai ad una stringa di andare in play?
String.play(); //non ha senso!
Le prototype permettono di scrivere le funzioni per le classi, che una volta dichiarate varranno per tutti gli oggetti appartenenti alla classe, quindi, se io dichiaro una prototype sulla classe MovieClip, ad esempio:
MovieClip.prototype.Dimezza = function() {
this._width = this.width/2; //dimezzo la larghezza
this._height = this.height/2; //dimezzo l'altezza
};
questa funzione essendo una prototype non verrà dichiarata su un singolo CLIP filmato... ma su tutta la classe, quindi:
myClip.Dimezza(); // funziona
myClip.myclip2.Dimezza(); //funziona
AltroClip.Dimezza(); // funziona
Qualsiasi oggetto possiederà questa funzione per appartenenza di classe.
I vantaggi più immediati sono:
1) scrittura del codice come se la funzione in questione fosse GLOBALE esistendo a qualsiasi livello e senza bisogno di ricercarla: una funzione normale bisognerebbe ricercarla così:
_root.nomeclipdoveèpresentelafunzione.funzione(_ro ot.targetCLIP, args);
invece possiamo effettuare direttamente
_root.targetClip.prototype(args);
codice più pulito.
2) codice più pulito
//====================
Per una trattazione completa sulle prototype ecco un link di riferimento: http://www.ultrashock.com/ff.htm?<a ...orial.html</a>
Per visitare una libreria di funzioni prototype già preconfezionate ecco qua: http://www.sephiroth.it/prototype.php
PS: Che cos'è "Movieclip.prototype.loader" ?
E' la dichiarazione della prototype "loader" alla classe "movieclip" per estenderla, probabilmente il codice continua con un
" = function(.....) { .... } ".
:metallica GRaNDISSI<O!!!
grazie![]()
Trinity
http://www.vocabolariodidio.it
http://www.giulianodelena.com
trova la tua casa per le vacanze
http://www.salento.lecce.it
Ma quindi io posso anche scrivere:
UllaLa.prototype.nonCapisco = function(){
}
e UllaLa diventa una classe, associare quindi un MC alla classe UllaLa (anche se non so come si fa ad associare un mc a una classe) e ogni volta che decido posso scrivere
mioMc.nonCapisco;
e il mio MC (diciamo così..) "non capisce"?
-----------------------------------------
Se posso creare una classe e associarci dei MC che utilizzerano quel determinato prototype è potentissimo, oltre che più pulito.
Se è così mi spiegate come fare?
Grazie
Ikniv
P.S. non mi rimandate a link dove spiegano i prototype in inglese, altrimenti non scrivevo al forum![]()
MovieClip.prototype.nonCapisco = function(){
}
Movieclip è la classe.. e tu aggiungi un metodo all'intera classe.
Se l'istanza "ullalà" è un oggetto Movieclip allora acquisirà, come tutti i movieclip anche il tuo nuovo metodo.
Capito("?");
![]()
Ok, MovieClip è la classe.
Ma io posso creare una nuova classe, fare in modo che solo alcuni mc facciano parte di questa classe?
E se posso farlo, come lo faccio?
Dai trasformiamo la funzione "nonCapisco" in "hoCapitoEureka"!
Grazie
Ikniv
Puoi creare una nuova classe sì... ma ci sono delle classi predefinite e queste sono come puoi immaginare:
movieclip
button
number
string
object
e molte altre...
Tutti i clip appartengono alla classe movieclip e quando vengono generati sono un istanza particolare di questa stessa classe.
Non credo che tu possa creare una nuova classe con gli stessi atributi di movieclip (cioè con tutti i suoi metodi). Quindi o scrivi i metodi per queste classi esistenti o ne crei un altra ex-novo che sarà vuota come un object.