Javafx переместить и повернуть - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть узел в javafx, который движется по временной шкале.Теперь я хочу повернуть узел тоже.Я попробовал это, но каждый раз, когда узел больше не держит путь и «улетает».Есть ли способ перевернуть и повернуть (я пробовал с rotatetransition)?

Редактировать:

Это мой View -Class

public class MyView extends ImageView{


public MyView (Image image) {
    super(image);

    RotateTransition transition = new RotateTransition();
    transition.setCycleCount(Animation.INDEFINITE);
    transition.setNode(this);
    transition.setDuration(Duration.millis(10));
    transition.setFromAngle(5);
    transition.setToAngle(5;
    transition.setAutoReverse(true);
    transition.play(); // */

}
}

В другом классе у меня естьthis:

 private void startMoveAnimation(MyView[] views) {
    x++;
    y++;
    this.timeline = new Timeline();
    timeline.setCycleCount(Animation.INDEFINITE);
    moveEvent = new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
                 for(View view: views){
                      view.relocate(x,y);
                 }

            }
        }
    };

    KeyFrame moveKeyFrame = new KeyFrame(Duration.millis(SPEED), moveEvent);
    timeline.getKeyFrames().add(moveKeyFrame);

    timeline.play(); // */
}

x и y - двойные значения.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Использование преобразований дает вам лучший контроль над порядком преобразований.Кроме того, некоторые преобразования позволяют указывать точку разворота, что невозможно, например, для свойства Node.rotate.Преобразования в списке применяются «справа налево».(Преобразование с самым высоким индексом применяется первым).

В следующем примере показано, как перемещать прямоугольник, вращающийся вокруг своего собственного центра (даже если цикл сбрасывается в исходное положение вместо непрерывного перемещения в одном и том же направлении, но свойства преобразований могут быть независимо анимированы произвольным образом):

@Override
public void start(Stage primaryStage) {
    Rectangle view = new Rectangle(100, 100);

    // pivot point = center of rect
    Rotate rotate = new Rotate(0, 50, 50);
    Translate translate = new Translate();

    // rotate first, then move
    view.getTransforms().addAll(translate, rotate);

    Timeline timeline = new Timeline(
            new KeyFrame(Duration.ZERO, new KeyValue(translate.xProperty(), 0d),
                    new KeyValue(translate.yProperty(), 0d), new KeyValue(rotate.angleProperty(), 0d)),
            new KeyFrame(Duration.seconds(2), new KeyValue(translate.xProperty(), 300d),
                    new KeyValue(translate.yProperty(), 500d), new KeyValue(rotate.angleProperty(), 360d)));
    timeline.setCycleCount(Animation.INDEFINITE);
    timeline.play();

    Pane root = new Pane(view);

    Scene scene = new Scene(root, 500, 500);
    primaryStage.setScene(scene);
    primaryStage.show();
}
0 голосов
/ 26 сентября 2019

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

...