LZTDで今実装してるTODOのドラッグ機能ですが、
こんなかんじで実装してます。
public function mouseDown(e:MouseEvent):void { todo.startDrag(false,new Rectangle(this.x,this.y,0,this.height)); //ドラッグ処理開始 } public function mouseUp(e:MouseEvent):void { todo.stopDrag(); //ドラッグ処理終了 //ドラッグ対象の中点が整列対象の一番上より下にきたら、ドラッグ対象はそれより下とみなす todo.y = todo.y - todo.height / 2; lineup(); //整列処理 }
開始処理はspriteにある startDrag() メソッドでOK。
ただ、そのままだと、自由自在に動かせてしまうので、
今回みたいな縦一列の画面の場合は、3つめの引数(width)を0にして
横には動かせないようにしてあります。
これはクリックしたところから、どれだけの幅で動かせるか、みたいな意味ぽいので、
this.widthとかにすると、
クリックしたところからwidth分横に動かせる=クリック位置によっては画面外にもってける
って感じになってしまうので。
横だけに動かしたいなら this.heightを0にして、横幅を指定すればOK。
あとなんか終了処理がややこしいですが、
1
2
3
4
5
ってあったとして、1をドラッグしたときに、
1の高さの中央点が、2の一番上よりも下にきたら
2
1
3
4
5
になるようにする処理を書いてます。
これ書かないと、1の一番上が、2の一番上よりも下に行かないと
上のように並ばないので。