スプライトをドラッグするサンプル
Sprite#startDrag()で簡単に実現できます。
- Sprite#startDrag()でドラッグ開始、Sprite#stopDrag()でドラッグ終了です。それぞれ、マウスダウン、マウスアップとかに割り当てておけばOK。
- 2つめの引数でドラッグ可能な領域を指定することもできます。
package { import flash.display.*; import flash.events.*; import flash.geom.*; // スプライトをドラッグするサンプル public class Sample extends Sprite { public function Sample(){ // ドラッグできるスプライト var circle1:Sprite = create( 0xFF4444, 50, 100 ); var circle2:Sprite = create( 0x44FF44, 150, 100 ); var circle3:Sprite = create( 0x4444FF, 250, 100 ); // マウスダウンでドラッグ開始 circle1.addEventListener(MouseEvent.MOUSE_DOWN, function(event:MouseEvent):void { // circle1は自由に移動可能 circle1.startDrag(); }); circle2.addEventListener(MouseEvent.MOUSE_DOWN, function(event:MouseEvent):void { // circle2は横方向にのみ移動可能 circle2.startDrag(false, new Rectangle(-1000, 0, 2000, 0) ); // 座標はこんなんじゃまずいんだろうけど。 }); circle3.addEventListener(MouseEvent.MOUSE_DOWN, function(event:MouseEvent):void { // circle3は縦方向にのみ移動可能 circle3.startDrag(false, new Rectangle(0, -1000, 0, 2000) ); }); // マウスアップでドラッグ終了。 ([circle1,circle2,circle3]).forEach( function(item:*,i:int,arr:Array):void { item.addEventListener(MouseEvent.MOUSE_UP, function(event:MouseEvent):void{ item.stopDrag(); }); }); } // スプライトを作る。 public function create( color:uint, x:int, y:int ):Sprite { var circle:Sprite = new Sprite(); var g:Graphics = circle.graphics; g.beginFill( color ); g.drawCircle( x, y, 20 ); g.endFill(); addChild(circle); return circle; } } }
ドラッグ中も本体は動かさずに、半透明のエイリアス的なモノをドラッグさせたい!とかなるともっと実装が必要だけど、スライダーのハンドルとかはこれでさくっと作れそうだな。