ドラッグの雛形

startDrag() は、マウスが stage から外れるとうまくいかない。
ドラッグの制限も矩形のみということで、自前でやるときの雛形。
こんな感じ。
http://park.geocities.jp/mxmlc/misc/DraggableButtonTest.html
// DraggableButton.as
package {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
public class DraggableButton extends Sprite {
private var delta:Point = new Point();
private var a:Point = new Point();
public var limit:Function = function(pt:Point):void {};
public function DraggableButton(c:uint, r:Number):void {
graphics.beginFill(c);
graphics.drawCircle(0, 0, r);
graphics.endFill();
addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
private function onMouseDown(ev:MouseEvent):void {
delta.x = x - parent.mouseX;
delta.y = y - parent.mouseY;
stage.addEventListener(MouseEvent.MOUSE_MOVE, stageMouseMove);
stage.addEventListener(MouseEvent.MOUSE_UP, stageMouseUp);
}
private function stageMouseMove(ev:MouseEvent):void {
a.x = parent.mouseX + delta.x;
a.y = parent.mouseY + delta.y;
limit(a);
x = a.x;
y = a.y;
dispatchEvent(new Event(Event.CHANGE));
ev.updateAfterEvent();
}
private function stageMouseUp(ev:MouseEvent):void {
stage.removeEventListener(MouseEvent.MOUSE_MOVE, stageMouseMove);
stage.removeEventListener(MouseEvent.MOUSE_UP, stageMouseUp);
}
}
}