2010-11-22 3 views
1

私は四角形のような図形を描画するキャンバスを持っています。カスタムマウスダウン/マウス移動ハンドラを使用してシェイプを移動すると、シェイプは親境界の外に出る可能性があります。Flex/Flashで親コンテナの外部にドラッグしないようにするにはどうすればよいですか?

子供が親のそれをスナップバックにバインド外にある場合、私はチェックしています:

var bounds:Rectangle = this.getBounds(this.parent); 
    var p:Point; 

    if (bounds.x <0) { 
    p = new Point(0,0); 
    p.offset(-bounds.x,0); 
    } 
    if (bounds.y <0) { 
    if (!p) p = new Point(0,0); 
    p.offset(0,-bounds.y); 
    } 
    if (bounds.y+bounds.height > this.parent.height) { 
    if (!p) p = new Point(0,0); 
    p.offset(0,-bounds.y-height+this.parent.height); 
    } 
    if (bounds.x+bounds.width > this.parent.width) { 
    if (!p) p = new Point(0,0); 
    p.offset(-bounds.x-width+this.parent.width,0); 
    } 
    if (p) { 
    trace("invoking snapInside ", p); 
      snapInside(p); 

私は左または上の境界の外に行くときsnapInsideメソッドが呼び出されます。しかし、子供が右または下の境界線の外にドラッグされると、Flex/Flashランタイムは親の高さと幅を自動的に拡大します。子のY境界が800ピクセルを超えると20ピクセルになると、this.parent.heightがflexによって自動的に820にサイズ変更されていることがわかります。

子が親の元の範囲外になると、親のサイズが変更されないようにするにはどうすればよいですか?

+0

なぜstartDrag(false、new Rectangle(... bounds ...)) – alxx

答えて

1

親オブジェクトの作成時には、関数の外のvarに境界を保存して、後で保存されたサイズを呼び出すことができます。あなたの関数内の境界をチェックし続けるならば、それはもちろん、親の変更を伴うオブジェクトとして変更されます。または、mouseDownでは境界を設定しますが、ドラッグではドラッグしないため、ドラッグオブジェクトがエッジに当たる前に境界が更新されます。

+0

これは私がやったことです。あなたは私のポストの後に同じことを提案しました。とにかく、ありがとう。 – TBD

関連する問題