Javafx动画循环



在C 或C编程语言中,我们知道要更改我们使用gotoxy(x,y)的绳索,我们可以使用循环和睡眠来更改山脉和制作动画。这样;

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

但是我的Queston在Javafx 2.0编程中怎么样?我正在使用Netbeans 7.2。感谢您的任何帮助。

使用javafx动画包。

Javafx动画教程中有许多示例,正如Andy在评论中指出的那样。

有一个可爱的跑步马动画循环的例子。

关键是您不睡觉javafx应用程序线程,每次更新某些内容并希望它呈现时,都必须将Javafx线程的控件发布回Javafx系统。Javafx动画课为您提供这些事情,因此您不必担心它。如果您像从问题中的示例代码中循环循环,Javafx将在循环完成后一次渲染场景,您将永远不会看到任何事情。

这是一个相当无聊的示例,它使用时间轴模拟您的问题中的C 代码,每400毫秒每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; }
  }
}

Javafx中有三个不同的选项,具体取决于您的需求。

最基本的是AnimationTimer 。相当于Swing的计时器。它仅包含一个在每个帧上调用的句柄方法,并将当前时间作为参数传递。您可能需要一些内部簿记,以免每次称为句柄时进行昂贵的计算。

过渡具有插值(FRAC)方法,该方法以0.0至1.0 之间的FRAC值调用。根据FRAC值,由您决定要进行所有UI更改。过渡和时间轴都扩展了动画,因此您可以设置诸如循环持续时间之类的东西,是否在结束时逆转过渡等等。

时间轴是最复杂的时间表。您定义包含不同节点的想要属性的任意数量的密钥帧(想想状态),时间表将为您完成所有工作,以插值如何使所提供值之间的更改动画。例如,您可以在节点的x属性为0中给出一个键帧,而另一个节点为100,时间表将为您完成动画。

已经考虑使用时间表动画。它是Javafx和
中动画的关键组成部分用于确定动画的何时以及以何种顺序出现。

这是一个示例

最新更新