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:

  1. all’ onRollOut del mouse sul pulsante controlla se il mouse è ancora premuto
  2. 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? :D ) per visualizzare l’esempio.

Tags:

Leave a Reply