salve,
in che modo posso rendere una classe creata da me con AS 2 un event broadcaster.
grazie
salve,
in che modo posso rendere una classe creata da me con AS 2 un event broadcaster.
grazie
assegnando la variabile a cio' che richiede un broadcast ? :master:
spiega meglio la situazione![]()
sto creando una classe Timer con un metodo che gestisce il countdown.
alla fine del countdown vorrei che lo segnalasse a dei listeners per iniziare alcune azioni.
la classe timer per ora è questa
class Timer {
function Timer() {}
function startCountDown(txt, time) {
//time = tempo di partenza
//txt = textfield dove scrivere
var id;
function tempo() {
txt.text = time;
time -= 10;
if (time<0) {
clearInterval(id);
}
}
id = setInterval(tempo, 10);
}
}
aggiungi una pubblica addListener alla tua classe e nell' if del timer , se la classe ha 1 o piu' listeners assegnati, fai partire l' evento onTimeEnd o come meglio pensi di chiamarlo ...
var pippo:Object = new Object();
pippo.onTimeEnd = function( variabile_eventuale ) {
trace('OK');
}
var mytimer:Timer = new Timer();
mytimer.addListener( pippo );
mytimer.startCountDown(txt, time);
// e dentro l' if
if (time<0) {
clearInterval(id);
if(this.__listener.onTimeEnd != undefined)
this.__listener.onTimeEnd('finish');
}
o qualcosa di simile, dove il listener lo associ nella addListener, per l' appunto![]()
viene errore:
**Error** Scene=Scene 1, layer=init, frame=1:Line 23: There is no method with the name 'addListener'.
mytimer.addListener( pippo );
Total ActionScript Errors: 1 Reported Errors: 1
che può significare?
![]()
ehm ... la classe e' un copia e incolla oppure l' hai scritta tu ?
nel primo caso leggiti qualcosa su AS 2.0, nel secondo devi ovviamente aggiungere un metodo pubblico di nome addListener alla classe Timer in grado di memorizzare su una variabile interna alla classe almeno un listener![]()
ok, quindi non basta scrivere
AsBroadcasters.initialize(Timer);
per rendere broacaster una classe ed avere automaticamete i metodi addListener e removeListener e l'array _listeners disponibili?
la classe l'ho scritta io
uhm, forse si ma devi comunque richiamare il broadcaster , come puo' flash sapere quando e' il momento di richiamare qualcosa ? come puo' sapere cosa chiamare del listener ?Originariamente inviato da gleone
ok, quindi non basta scrivere
AsBroadcasters.initialize(Timer);
per rendere broacaster una classe ed avere automaticamete i metodi addListener e removeListener e l'array _listeners disponibili?
Se ad uno Stage agiungi un listener che non ha la funzione onResize e' inutile che l' aggiungi, se ti serve quella funzione.
Spero di essermi spiegato![]()
dunque:
la classe Timer è
class Timer {
var listeners:Array = new Array();
function Timer() {}
function addListener(o:Object) {
listeners.push(o);
}
function startCountDown(txt, time) {
var id;
function tempo() {
txt.text = time;
if (time<=0) {
clearInterval(id);
listeners[0].onTimeEnd();
trace("FINISH");
}
time -= 10;
}
id = setInterval(tempo, 10);
}
}
nel fla ho messo
---------------------------
var pluto:Object = new Object();
pluto.onTimeEnd = function() {
trace("OK");
};
var mytimer:Timer = new Timer();
mytimer.addListener(pluto);
mytimer.startCountDown(txt_counter, 1000);
---------------------------------
alla fine mi scrive FINISH ma non OK deduco che non chiama la funzione onEndTimer