[AS3] BasicButton

package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;

public class BasicButton {
public static const UP:String = “up”;
public static const OVER:String = “over”;
public static const DOWN:String = “down”;
public static const DISABLE:String = “disable”;

private var _mc:MovieClip;
private var _handler:Function;
private var _enabled:Boolean; // enable/disable

public function BasicButton(mc:MovieClip, handler:Function=null) {
_mc = mc;
_handler = handler;
_enabled = true;

_mc.gotoAndStop(UP);

_mc.buttonMode = true;
_mc.useHandCursor = true;

_mc.addEventListener(MouseEvent.MOUSE_OVER, myMouseOver);
_mc.addEventListener(MouseEvent.MOUSE_OUT, myMouseOut);
_mc.addEventListener(MouseEvent.MOUSE_DOWN, myMouseDown);
}

/* CLEANUP ******************************************************************/
public function destroy():void {
_mc.removeEventListener(MouseEvent.MOUSE_OVER, myMouseOver);
_mc.removeEventListener(MouseEvent.MOUSE_OUT, myMouseOut);
_mc.removeEventListener(MouseEvent.MOUSE_DOWN, myMouseDown);
}

/* SETTERS ******************************************************************/
public function enable(b:Boolean):void {
_enabled = b;
_mc.buttonMode = _enabled;
_mc.useHandCursor = _enabled;

if (_enabled) {
_mc.gotoAndStop(UP);
}
else {
_mc.gotoAndStop(DISABLE);
}
}

/* HANDLERS *****************************************************************/
private function myMouseOver(e:MouseEvent):void {
if (_enabled) { // if it’s not disabled…
_mc.gotoAndStop(OVER);
}
}

private function myMouseOut(e:MouseEvent):void {
if (_enabled) { // if it’s not disabled…
_mc.gotoAndStop(UP);
}
}

private function myMouseDown(e:MouseEvent):void {
if (_enabled) { // if it’s not disabled…
_mc.gotoAndStop(DOWN);

_mc.stage.addEventListener(MouseEvent.MOUSE_UP, myMouseUp);
}
}

private function myMouseUp(e:MouseEvent):void {
_mc.stage.removeEventListener(MouseEvent.MOUSE_UP, myMouseUp);

if (_mc.hitTestPoint(_mc.stage.mouseX, _mc.stage.mouseY)) {
_mc.gotoAndStop(UP);
_handler();
}
else {
_mc.gotoAndStop(UP);
}
}
}
}

Advertisement

~ by rotaercz on 2010-June-7.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.