2009-08-24 3 views
0

In einigen Sprite-Anwendungen (nämlich pulpcore) können Sie einen Ankerpunkt für ein Objekt definieren. Wenn der Ankerpunkt eines Rechtecks ​​0,0 ist und seine Koordinaten x:0,y:0 sind, wird der obere linke Punkt des Rechtecks ​​am oberen linken Bildschirmrand angezeigt.Ankerpunkt von x, y in JavaFX-Knoten

Wenn jedoch der Ankerpunkt des Rechtecks ​​50,50 ist und seine Größe ist 100x100, würde die Mitte des Rechtecks ​​bei 0,0 platziert wird und nur dann ist es unten rechts Teil angezeigt wird.

Gibt es eine ähnliche Eigenschaft in JavaFX? Gibt es eine einfache Möglichkeit, dies zu implementieren (können Sie die x und die y Koordinaten eines JavaFX-Knotens an seine eigene Höhe und Breite binden?)?

Wenn ich die x,y Koordinaten an boundsInLocal/Parent.width binde bekomme ich eine Laufzeitausnahme.

Antwort

2

Der Ursprung für ein Rechteck ist oben links, wie Sie sagen. Sie haben zwei Möglichkeiten, den Knoten zu positionieren. Sie können entweder layoutX und layoutY verwenden. var rect = Rechteck { layoutX: 50 layoutY: 50 widht: 100 Höhe: 100 }

oder translateX und translateY

var rect = Rechteck { translateX: 50 translateY: 50 width: 100 height: 100 } Der Hauptzweck der Verwendung von sowohl layoutX/Y als auch translateX/Y ist, dass translateX/Y veränderbar sein soll, während layoutX/Y für die anfängliche Positionierung gedacht ist. Zum Beispiel können Sie translateX/Y in einer Animation ändern, während die ursprüngliche Position in layoutX/Y gespeichert wird. Der ultimative Ort wird immer layoutX + translateX und layoutY + translateY sein.

Um den Ursprung zum Mittelpunkt (50,50) zu verschieben, verwenden Sie eine negative Übersetzung. var rect = Rechteck { translateX: -50 translateY: -50 widht: 100 Höhe: 100 }

Einige Formen sind in der oberen linken Ursprung basiert. Zum Beispiel verwendet Circle centerX und centerY.

+0

Nicht gut genug. Ich möchte X, Y an die Breite des aktuellen Knotens binden. –

+0

so könnten Sie tun: var rect: Rectangle = Rechteck {x: bind rect.width y: bind rect.height}; oder vorzugsweise var rect: Rectangle = Rechteck {layoutX: bind rect.width layoutY: bind rect.height}; – JimClarke

+0

Sorry, ich habe vergessen, x und y wurde aus dem Knoten entfernt. Sie müssen LayoutX/Y oder TranslateX/Y verwenden. So könnten Sie Rectangle {layoutX: bind rect.layoutBounds.width} machen. – JimClarke