- Home
- Categorie
- Digital Marketing
- Grafica, Visual Design & UX
- invocare una funzione in un oggetto istanziato
-
invocare una funzione in un oggetto istanziato
vorrei realizzare "n" oggetti grafici animati (per fare un esempio diciamo una faccina ed una manina).
tali oggetti grafici saranno poi istanziati in un numero imprecisato (tipo 3 o 4 manine, 5 o 6 faccine) sulla clip principale dell'applicazione attraverso il metodo attachMovie.
vorrei che ogni oggetto abbia degli stati a se e che questi stati fossero attivati dalla clip principale, mi spiego con un esempio:
le 3 o 4 manine dovrebbero avere gli stati: 1-mano chiusa, 2-mano aperta, 3-mano che saluta, etc...
le 5 o 6 faccine dovrebbero avere gli stati: 1-faccina triste, 2-faccina indifferente,3-faccina sorridente, etc.
gli oggetti dovrebbero avere una funzione in as che accetti un parametro dall'esterno (un numero) e "attivi" il relativo stato.
il discorso è : dopo che ho istanziato e posizionato le istanze dei vari oggetti, con attachMovie, come faccio a dire: mano 1 saluta, faccina 2 ridi... dalla clip che ospita il movie istanziato?in pratica come faccio a scrivere una funzione in un oggetto grafico e a richiamarla poi dalla movie che lo ospita?
grazie ciao.
-
Ciao bubbolo,
credo che la miglior cosa sia innanzitutto creare un keyframe con il proprio stato all'interno di ogni manina (es: keyframe1: manina ferma, keyframe2:manina che saluta, keyframe3:manina aperta ecc ecc).Fatto questo crei una funzione in questo modo:
function changeStatement(m:MovieClip,n:Number):Void { m.gotoAndStop(n); }
e la chiami così:
changeStatement(manina_1_mc,2);
-
ok, può andar bene.
la mia reale esigenza è però richiamare dalla movieclip principale una funzione della movieclip istanziata (con attachMovie), dove poi tale funzione fà quello che ci siamo detti.
ovviamente deve esserci un modo per identificare a quale istanza richiamare tale funzione, perchè potrei avere 100 istanze dello stesso clip ma vorrei invocare la funzione solo per l'instanza n. x.
è possibile?
-
Devi utilizzare un Array in questo modo:
var clips_array:Array=new Array(); var maninaCheSaluta:Number=2; var maninaAperta:Number=3; var maninaChiusa:Number=4; for(var i:Number=0;i<50;i++) { var clip:MovieClip=_root.attachMovie('nomeclip','clip_'+_root.getNextHighestDepth()+'_mc',_root.getNextHighestDepth()); clips_array.push(clip); } for(var i:Number=0;i<clips_array.length;i++) { clips_array*.onPress=function() { changeStatement(this,maninaCheSaluta); } } function changeStatement(m:MovieClip,n:Number):Void { m.gotoAndStop(n); }
-
quindi non posso avere una movieclip con le sue funzioni in un'altra movie clip e da questa usare le funzioni della movieclip incorporata?
-
@bubbolo said:
quindi non posso avere una movieclip con le sue funzioni in un'altra movie clip e da questa usare le funzioni della movieclip incorporata?
Adesso non ti seguo...
-
lo so potrebbe sembrare strano.
mi spiego meglio, magari con un esempio:
poniamo di avere un cane che, in qualità di OGGETTO, ha dei metodi che potrebbero essere SEDUTO, CORRI, FERMO, etc.etc.
poniamo ora di farne un clone e "consegnarlo" ad un padrone, che sarà abituato a impartire i comandi di cui sopra.
se facessimo 1000 cloni tutti utilizzerebbero gli stessi comandi.
quindi se il cane è l'oggetto che vorrei creare esso dovrebbe avere da qualche parte incorporato il codice per eseguire i comandi (diciamo delle funzioni).
la clip che lo ospiterà dovrà semplicemente inviargli questi comandi; scrivendo del codice (ma probabilmente sbagliando):
ponendo "aaa" l'oggetto origine e pensando che questo abbia una funzione, diciamo, myFunc()
nella clip principale se faccio
_root.attachMovie("aaa","mynewmovie1",1);
quello che vorrei ottenere è qualcosa del genere
mynewmovie1.myFunc();è possibile?
-
Stai parlando di Object Oriented Programming.
Certo che è possibile ma devi lavorare con le Classi di Flash e sfruttare l' Ereditarietà.
Crei i tuoi Oggetti (Classi) e li implementi con i propri metodi (funzioni) e proprietà.
-
mi faresti un esempio in tal senso?
-
E' difficile fare un esempio di Object Oriented Programming.
E' come dire ad un geometra se ti fa un esempio su come si costruisce una casa...Hai già delle basi di OOP ?
-
si, capisco.
ho gia' delle basi di OOP, ma con flash sono agli albori.
-
Questo potrebbe essere un primo esempio:
class Manina { private var clip:MovieClip; public function Manina() { this.init(); } private function init(Void):Void { this.clip=_root.attachMovie('ma_manina','manina_mc',_root.getNextHighestDepth()); } public function saluta(Void):Void { this.clip.gotoAndPlay(3); } }
Salvi il file come Manina.as
Dalla timeline istanzi l'oggetto Manina in questo modo:
var my_manina:Manina=new Manina();
e chiami i suoi metodi in questo modo:
my_manina.saluta();
-
ok grazie
proverò...
ciao