Настройка перехода пути фигуры к повороту другой фигуры в JavaFX

Я создал круг с треугольником перед ним, который движется вперед и назад вместе с кругом. Теперь я хочу, чтобы треугольник вращался вокруг круга, когда круг вращается. Моя первая мысль заключается в том, что для этого потребуется PathTransition и привязка, но пока мне не повезло. Вот мой код:

public class FXTest2 extends Application {
@Override
public void start(Stage primaryStage) {

    Pane pane = new Pane();


    Ellipse ell = new Ellipse();
    ell.setCenterX(850);
    ell.setCenterY(500);
    ell.setRadiusX(480);
    ell.setRadiusY(480);
    ell.setFill(Color.TRANSPARENT);
    ell.setStroke(Color.BLACK);

    Circle circ1 = new Circle(500.0f, 500.0f, 25.0f);
    circ1.setFill(Color.GREEN);

    Path path = new Path();

    Polygon tri1 = new Polygon(530, 495, 530, 505, 540, 500);
    tri1.translateXProperty().bind(circ1.translateXProperty());
    tri1.translateYProperty().bind(circ1.translateYProperty());
    PathTransition pathMove = new PathTransition();
    pathMove.setNode(tri1);
    pathMove.setPath(circ1.getRotate());

    circ1.setOnKeyPressed((e) -> {
        if(e.getCode() == KeyCode.UP) {
            circ1.setTranslateX(circ1.getTranslateX() - 15);
        }
        else if(e.getCode() == KeyCode.LEFT) {
            circ1.setRotate(circ1.getRotate() - 15);
        }
        else if(e.getCode() == KeyCode.RIGHT) {
            circ1.setRotate(circ1.getRotate() + 15);
        }
        else if(e.getCode() == KeyCode.DOWN) {
            circ1.setTranslateX(circ1.getTranslateX() + 15);
        }

    });

    pane.getChildren().addAll(ell, circ1, tri1);

    Scene scene = new Scene(bpane, 1700, 1000); 
    scene.getStylesheets().add("NewFile.css");

    primaryStage.setScene(scene);
    primaryStage.setTitle("FXTest2");
    primaryStage.show();

    circ1.requestFocus();


}

public static void main(String[] args) {
    launch(args);
}

}

person Robert    schedule 30.03.2015    source источник


Ответы (1)


Вам нужно вращать треугольник вокруг центра круга. Для этого создайте преобразование Rotate, привяжите его точку вращения к центру круга, а его угол — к степени поворота круга. Затем просто добавьте преобразование поворота в список преобразований треугольника:

Rotate rotate = new Rotate();
rotate.pivotXProperty().bind(circ1.centerXProperty());
rotate.pivotYProperty().bind(circ1.centerYProperty());
rotate.angleProperty().bind(circ1.rotateProperty());

tri1.getTransforms().add(rotate);
person James_D    schedule 30.03.2015