JavaFX的动画循环(javafx animation looping)

2019-07-02 09:02发布

在C ++或C编程语言,我们知道要改变我们使用cordinate gotoxy(X,Y),我们可以使用循环和睡眠改变cordinate和制作动画。 像这样;

for(x = 20; x < 25; x++){
  gotoxy(x,20); cout << "*"
}

但我queston是怎么样在JavaFX 2.0编程? 我使用的NetBeans 7.2。 感谢您的任何帮助。

Answer 1:

有看看使用时间轴动画 。 这是动画的JavaFX中一个重要组成部分,
用于建立时,以及以何种顺序,出现一个动画的关键部分。

下面是一个例子



Answer 2:

使用JavaFX的动画包 。

里有无数的例子JavaFX的动画教程 ,安迪在他的评论中指出。

并有一个可爱的例子奔马动画循环 。

关键是,你不睡觉的JavaFX应用程序线程,你必须每次更新的东西,希望它渲染的时候被释放了JavaFX线程的控制权归还给JavaFX的系统。 这样你就不用担心了JavaFX动画类照顾这些东西给你。 如果你只是循环就像你在从你的问题的示例代码做,JavaFX的将只是渲染场景,一旦您的循环完成后,你将不会看到任何事情发生。

下面是它采用了一个相当乏味例如时间线 ,以模拟C ++代码在你的问题,以移动点像素每400毫秒。

import java.util.Date;
import javafx.animation.*;
import javafx.application.Application;
import javafx.event.*;
import javafx.scene.*;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

/** Simple JavaFX Animation Sample. */
public class AnimationSample extends Application {
  private       int         x        = 20;
  private       String      status   = "";
  private final Circle      dot      = new Circle(20, 20, 3);
  private final TimeCounter counter  = new TimeCounter();

  public static void main(String[] args) throws Exception { launch(args); }
  @Override public void start(final Stage stage) throws Exception {
    final Timeline timeline = new Timeline(
      new KeyFrame(Duration.ZERO, new EventHandler() {
        @Override public void handle(Event event) {
          refreshScene();
        }
      }),  
      new KeyFrame(Duration.millis(400))
    );
    timeline.setCycleCount(Timeline.INDEFINITE);

    stage.setScene(new Scene(new Group(dot), 50, 50));
    stage.show();

    counter.reset();
    timeline.play();
  }

  private void refreshScene() {
    gotoxy(x, 20);

    status = "*****".equals(status) ? "*" : status + "*";
    System.out.println(String.format("%7d", counter.elapsed()) + " ms " + x + " " + status);

    if (x == 24) {
      x = 20;
    } else {
      x++;
    }
  }      

  private void gotoxy(int x, int y) {
    dot.setCenterX(x); 
    dot.setCenterY(y);
  }

  class TimeCounter {
    private long start = new Date().getTime();
    void reset()   { start = new Date().getTime(); }
    long elapsed() { return new Date().getTime() - start; }
  }
}


Answer 3:

有JavaFX中三个不同的选项,根据您的需求。

最基本的一个就是AnimationTimer 。 这相当于Swing的计时器。 它只包含一个手柄方法被称为每一帧上,并通过当前时间作为参数。 你可能需要一些内部簿记,这样你就不会做昂贵的计算每次把手被调用。

过渡有一个内插(FRAC)方法,该方法被调用以在0.0和1.0之间的压裂值 。 改变你想的基础上,压裂值这是给你做所有的UI。 这两种转型与时间轴延长动画,这样你就可以设置的东西像周期持续时间,过渡是否年底扭转等

时间轴是最复杂的一个。 您定义的关键帧任意量(认为国家)包含不同的节点想要属性,时间轴会做所有的工作你插如何动画提供的值之间的变化。 例如,你可以给一个关键帧,其中一个节点的x属性为0,而另一种是100,和时间表将做动画给你。



文章来源: javafx animation looping