ドラッグの雛形

DraggableButtonTest


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);
    }
  }
}