FLEXで縦だけ、横だけにコンポーネントをドラッグしたいとき

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の一番上よりも下に行かないと
上のように並ばないので。

Leave a Reply