ActionScript 2.0: usare al meglio setInterval()

Esistono due modalità di usare l’utilissima funzione setInterval() in ActionScript 2.0:

1
setInterval(functionReference:Function, interval:Number, [param1:Object, param2, ..., paramN]) : Number

Questa è quella più usata, almeno la prima che la si prova, inoltre ricorda (è praticamente identica) l’omonima funzione Javascript (tutti ECMA). Questa modalità è anche semplice da ricordare e richiede poche righe di codice – nome funzione, numero di millisecondi, …

Tuttavia, quando smettiamo di fare prove e passiamo a sviluppare un progetto consistente, la modalità sopra esposta può risultare scomoda, soprattutto quando viene eseguito il codice della nostra funzione.

Un’alternativa inizialmente più onerosa è usare questa modalità:

1
setInterval(objectReference:Object, methodName:String, interval:Number, [param1:Object, param2, ..., paramN]) : Number

In questo caso passiamo alla funzione setInterval() un oggetto e non più un “puntatore” ad una funzione. Il secondo parametro, in questo caso, è il nome (è una Stringa) del metodo da invocare nell’oggetto passato. Il resto è uguale… Il vantaggio è immediatamente visibile in questi due esempi:

ESEMPIO 1

1
2
3
4
function miaFunction() {
    trace("Hi, world, this="+this);
}
var i:Number = setInterval(miaFunction, 1000);

ESEMPIO 2

1
2
3
4
5
var obj:Object = new Object();
obj.miaFunction = function() {
    trace("Hi, world, this=" + this);
};
var i:Number = setInterval(obj, "miaFunction", 1000);

L’esempio 1 funzionerà parzialmente, nel senso che il puntatore this sarà undefined. L’esempio 2, invece, porta come contesto (this) l’oggetto obj che gli abbiamo passato! Questo può risultare estremamente utile in quanto ci permette di aggiungere – a piacere - metodi e – soprattutto - proprietà all’oggetto obj, così da poter accedere a queste informazioni dalla nostra funzione (o metodo) chiamata da setInterval(). Ad esempio:

1
2
3
4
5
6
var obj:Object = new Object();
obj.miaProperty = 64738;
obj.miaFunction = function() {
    trace("Hi, world, miaProperty=" + this.miaProperty);
};
var i:Number = setInterval(obj, "miaFunction", 1000);

Se preferiamo questo metodo, cioè preferiamo non rimanere senza un this valorizzato, siamo necessariamente costretti a creare un oggetto? Assolutamente no! Partendo dal presupposto che il livello principale (_root o _level0) è un oggetto che si comporta da contesto globale (o principale) quando inseriamo ad esempio del codice nel primo fotogramma, possiamo sfruttare questo puntatore per ottenere un comportamento ” ad oggetti” senza crearne nessuno; perchè creare un nuovo oggetto quando ce nè uno già bello è pronto?!
Ecco come scrivere l’esempio 1 in modo assai migliore:

1
2
3
4
function miaFunction() {
    trace("Hi, world, this=" + this);
}
var i:Number = setInterval(_root, "miaFunction", 1000);

Di sonseguenza:

1
2
3
4
5
function miaFunction() {
trace("Hi, world, miaProperty=" + this.miaProperty);
}
_root.miaProperty = 53280;
var i:Number = setInterval(_root, "miaFunction", 1000);

Non ci sono commenti per questo Post

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
					<code></code> // blocco generico
					[cc_actionscript][/cc_actionscript] // Actionscript
					[cc_actionscript3][/cc_actionscript3] // Actionscript 3
					[cc_css][/cc_css] // CSS Style Sheet
					[cc_html][/cc_html] // HTML
					[cc_js][/cc_js] // Javascript
					[cc_objc][/cc_objc] // Objective-C
					[cc_php][/cc_objc] // PHP
					[cc_sql][/cc_sql] // SQL


Stop SOPA