2010-11-22 9 views
1

Ich habe eine Leinwand, auf der ich Formen wie Rechteck usw. zeichne. Wenn ich die Form mit meinem benutzerdefinierten Maus-Down-/Mausbewegungs-Handler verschiebe, kann die Form außerhalb der Elterngrenzen gehen.Wie verhindere ich das Ziehen außerhalb des übergeordneten Containers in Flex/Flash?

Ich bin Überprüfung, wenn das Kind außerhalb der Grenze der Eltern ist es zu schnappen zurück:

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); 

Die snapInside Methode aufgerufen wird, wenn ich außerhalb der linken oder oberen Grenze gehen. Aber wenn das Kind außerhalb der rechten oder unteren Grenze gezogen wird, finde ich, dass die Flex/Flash-Laufzeit automatisch die Höhe und Breite des Elternteils erweitert. Also sagen Sie, die Elterngröße war anfänglich 800x600, wenn Kind Y Grenzen von 800 von sagen wir 20 Pixel überschreitet, finde ich die this.parent.Height automatisch von Flex auf 820 skaliert !!

Wie verhindere ich, dass die Größe der Eltern geändert wird, wenn das Kind die ursprünglichen Grenzen der Eltern überschreitet?

+0

warum nicht startDrag (false, new Rectangle (... Grenzen ...)) – alxx

Antwort

1

Wenn das übergeordnete Objekt erstellt wird, speichern Sie die Begrenzungen in einer Variablen außerhalb Ihrer Funktion, damit Sie später die gespeicherte Größe aufrufen können. Wenn Sie die Grenzen innerhalb Ihrer Funktion überprüfen, ändert sich das natürlich, wenn sich die Objekte mit dem Elternelement ändern. Oder legen Sie die Grenzen für mouseDown fest, aber nicht für das Ziehen, damit Sie eine aktualisierte Grenze haben, bevor Ihr Ziehobjekt die Kante berührt.

+0

Das ist, was ich getan habe. Sahst du das gleiche nach meinem Post vorgeschlagen? Trotzdem danke. – TBD

Verwandte Themen