Fino ad actionscript 2 pulsanti e movieclip gestivano anche l’evento onReleaseOutside. Con l’avvento di flash 9 (pardon, cs3), il release outside è stato depennato, non si sa bene per quale motivo, però, per la disperazione di grandi e piccini, quell’evento non c’è pi√π.
Gestire l’onReleaseOutside in actionscript 3 è però pi√π facile di quanto si possa credere.
Scaricatevi questo file >> onReleaseOutside actionscript 3
Dentro ci troverete due classi:
la classe interessante è “Button.as”.
La classe Button estende la classe nativa di actionscript 3 “SimpleButton” e aggiunge semplicemente il gestore dell’evento release outside.
Con as3 è possibile rilevare l’ onRelease e l’ onRollOut di un SimpleButton tramite i gestori di evento della classe MouseEvent.
Ma come è possibile combinare questi due eventi per gestire l’ onReleaseOutside?
La logica è la seguente:
- all’ onRollOut del mouse sul pulsante controlla se il mouse è ancora premuto
- se il mouse è ancora premuto aggiungi un event listener sul release del mouse rispetto allo stage
Niente di complesso… diamo un’occhiata al codice:
//gestore del press
internal function onPress(e:MouseEvent):void
{
trace("press");
}//gestore del release
internal function onRelease(e:MouseEvent):void
{
trace("release");
}
//gestore del FAMIGERATO release outside
internal function onReleaseOutside(e:MouseEvent):void
{
trace("release outside");
}
//gestore del rollout
internal function onRollOut(e:MouseEvent):void
{
trace("rollout");
if(e.buttonDown){
//QUI AGGIUNGO L'EVENTO PER GESTIRE IL RELEASE OUTSIDE
e.target.stage.addEventListener(MouseEvent.MOUSE_UP, onReleaseOutside);
}
}
//gestore del rollover
internal function onRollOver(e:MouseEvent):void
{
trace("rollover");
//al rollover del mouse sul pulsante elimino il releaseoutside
e.target.stage.removeEventListener(MouseEvent.MOUSE_UP, onReleaseOutside);
}
Nel file zip allegato trovate il resto della classe Button e una classe flashfuckit (bel nome eh?
) per visualizzare l’esempio.
Tags: Source