Trucco del giorno - target e currentTarget di Actionscript 3.0
This is a discussion on Trucco del giorno - target e currentTarget di Actionscript 3.0 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; La guida Flash CS3 ne parla, ma secondo me non rende bene l' idea.
Sto parlando delle proprietà target ...
Trucco del giorno - target e currentTarget di Actionscript 3.0
La guida Flash CS3 ne parla, ma secondo me non rende bene l' idea.
Sto parlando delle proprietà target e currentTarget delle classi comprese nel package flash.events ( quindi tutte le classi degli eventi di Actionscript 3.0 ).
A quanto pare, utilizzando le due proprietà citate per recuperare l' oggetto che ha dispacciato l' evento, si nota una differenza sostanziale che può mettere un developer in difficoltà.
Vediamo bene a cosa mi riferisco...
Mettiamo caso che stiamo utilizzando un listener per intercettare un evento del mouse su una MovieClip.
In questo esempio utilizzerò gli eventi MOUSE_DOWN e MOUSE_UP della classe MouseEvent a cui associerò una funzione che una volta chiamata eseguirò startDrag e stopDrag della MovieClip sulla quale è appunto avvenuto l' evento.
Per fare ciò, utilizzerò le proprietà target e currentTarget della classe MouseEvent per recuperare la clip cliccata dalla funzione chiamata durante l' evento ed assegnare quindi lo start Drag.
Creo una FLA che salvo con nome ' main.fla ', al cui interno creo una MovieClip in libreria di qualsiasi forma ( tanto è un esempio ) al cui interno avrò un campo di testo dinamico.
Istanzio 2 volte la MovieClip sullo stage e gli associo i nomi ' test_0_mc ' e ' test_1_mc '.
Ora scrivo il codice :
Code:
test_0_mc.addEventListener(MouseEvent.MOUSE_DOWN,trascina);
test_0_mc.addEventListener(MouseEvent.MOUSE_UP,lascia);
test_1_mc.addEventListener(MouseEvent.MOUSE_DOWN,trascina2);
test_1_mc.addEventListener(MouseEvent.MOUSE_UP,lascia2);
function trascina(m:MouseEvent):void
{
m.currentTarget.startDrag();
}
function lascia(m:MouseEvent):void
{
m.currentTarget.stopDrag();
}
function trascina2(m:MouseEvent):void
{
m.target.startDrag();
}
function lascia2(m:MouseEvent):void
{
m.target.stopDrag();
}
Adesso, se proviamo a trascinare la MovieClip di sinistra ( test_0_mc ), notiamo che tutto fila liscio e Flash dal comando m.currentTarget risale alla MovieClip che è stata cliccata.
Se invece trascino la MovieClip di destra, Flash ( dall' errore che da ) sembra dire che non trova la proprietà startDrag della classe TextField, per cui a rigor di logica:
- se associo l' evento ad una MovieClip vuota al suo interno, usare la proprietà target
- se associo l' evento ad una MovieClip con altri oggetti alsuo inerno, usare laproprietà currentTarget