2015-03-30 5 views
0

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

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

} 

ответ

2

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

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

tri1.getTransforms().add(rotate); 
+0

Это отличное спасибо. – Robert

 Смежные вопросы

  • Нет связанных вопросов^_^