ActionScriptの描画オブジェクトにはドラッグする機能が組み込まれている。
startDrag()でドラッグを開始して、stopDrag()でドラッグを終了する。ドラッグを開始するとマウスの動きにあわせてオブジェクトが移動する。
マウスのボタンを押している間だけドラッグするようには、マウスイベントでボタンが押されたらドラッグを開始し、ボタンが離されたらドラッグを終了すればよい。
package { import flash.display.Sprite; import flash.events.MouseEvent; public class Drag extends Sprite { public function Drag() { var circle:Sprite = new Sprite(); circle.graphics.beginFill(0x808080); circle.graphics.drawCircle(0,0,100); circle.graphics.endFill(); circle.buttonMode = true; // カーソルを手の形に addChild(circle); circle.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler); circle.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler); } // マウスのボタンが押されたら private function mouseDownHandler(e:MouseEvent):void { // ドラッグ開始 e.currentTarget.startDrag(); } // マウスのボタンが離されたら private function mouseUpHandler(e:MouseEvent):void { // ドラッグ終了 e.currentTarget.stopDrag(); } } }
buttonModeプロパティをtrueにすると、マウスカーソルがその描画オブジェクト上に来たら、マウスカーソルが手の形になる。
ドラッグするメソッドが組み込まれているとは面白い。これはやっぱりUIに強いFlashならではだろう。