在C ++或C编程语言,我们知道要改变我们使用cordinate gotoxy(X,Y),我们可以使用循环和睡眠改变cordinate和制作动画。 像这样;
for(x = 20; x < 25; x++){
gotoxy(x,20); cout << "*"
}
但我queston是怎么样在JavaFX 2.0编程? 我使用的NetBeans 7.2。 感谢您的任何帮助。
在C ++或C编程语言,我们知道要改变我们使用cordinate gotoxy(X,Y),我们可以使用循环和睡眠改变cordinate和制作动画。 像这样;
for(x = 20; x < 25; x++){
gotoxy(x,20); cout << "*"
}
但我queston是怎么样在JavaFX 2.0编程? 我使用的NetBeans 7.2。 感谢您的任何帮助。
有看看使用时间轴动画 。 这是动画的JavaFX中一个重要组成部分,
用于建立时,以及以何种顺序,出现一个动画的关键部分。
下面是一个例子
使用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; }
}
}
有JavaFX中三个不同的选项,根据您的需求。
最基本的一个就是AnimationTimer 。 这相当于Swing的计时器。 它只包含一个手柄方法被称为每一帧上,并通过当前时间作为参数。 你可能需要一些内部簿记,这样你就不会做昂贵的计算每次把手被调用。
过渡有一个内插(FRAC)方法,该方法被调用以在0.0和1.0之间的压裂值 。 改变你想的基础上,压裂值这是给你做所有的UI。 这两种转型与时间轴延长动画,这样你就可以设置的东西像周期持续时间,过渡是否年底扭转等
时间轴是最复杂的一个。 您定义的关键帧任意量(认为国家)包含不同的节点想要属性,时间轴会做所有的工作你插如何动画提供的值之间的变化。 例如,你可以给一个关键帧,其中一个节点的x属性为0,而另一种是100,和时间表将做动画给你。