按下键时以固定的速率进行翻译

时间:2019-03-18 17:09:35

标签: java animation javafx

我试图让ImageView在窗格内移动,只要按下一个键即可。因为我希望动画尽可能平滑,所以我认为JavaFX动画工具包是我的最佳选择,但是我无法找到如何正确控制动画速度的方法。这是我的主意:

ImageView image;
TranslateTransition translate;

@Override public void start(Stage primaryStage) throws Exception {
   image = new ImageView("file:D:\\test.jpg");
   image.setFocusTraversable(true);

   AnchorPane pane = new AnchorPane(image);
   pane.setOnKeyPressed(event -> translate.play());
   pane.setOnKeyReleased(event -> translate.stop());

   translate = new TranslateTransition();
   translate.setOnFinished(event -> translate.playFromStart());
   translate.setDuration(Duration.seconds(1.0));
   translate.setByX(20.0);
   translate.setNode(image);

   primaryStage.setScene(new Scene(pane));
   primaryStage.show();
}

除了动画的每个循环之间非常明显的停顿外,它的工作方式与我预期的一样。我之所以采用这种方法,是为了能够控制ImageView的速度,例如在这里每秒20像素的恒定速度。

使用AnimationTimer似乎更合适,但据我了解,此计时器取决于刷新阶段的帧速率,计算机之间可能会有所不同,从而产生不同的动画速度。

我的问题有两个方面。首先,是否可以修改我的代码以消除一个循环完成与下一次启动之间的延迟?其次,您能建议什么更好的方法?

问题是我不能简单地使用Animation.setCycleCount(Animation.INDEFINITE)循环播放动画,因为当循环播放时,图像将从其原始位置重新开始。

0 个答案:

没有答案