在 c++ 或 c 编程语言中,我们知道改变坐标我们使用 gotoxy(x,y) 并且我们可以使用循环和睡眠来改变坐标并制作动画。像这样;
for(x = 20; x < 25; x++){
gotoxy(x,20); cout << "*"
}
但我的问题是在 JAVAFX 2.0 编程中怎么样?我正在使用netbeans 7.2。感谢您的帮助。
使用JavaFX 动画包。
正如 Andy 在评论中指出的那样,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 的 Timer。它只包含一个在每一帧上调用的句柄方法,并将当前时间作为参数传递。您可能需要一些内部簿记,这样您就不会在每次调用句柄时都进行昂贵的计算。
Transition有一个 interpolate(frac) 方法,该方法使用 frac 的值在 0.0 和 1.0 之间调用。您可以根据 frac 值进行所有您想要的 UI 更改。过渡和时间线都扩展了动画,因此您可以设置循环持续时间、过渡是否在结束时反转等。
时间线是最复杂的。您定义任意数量的包含不同节点所需属性的关键帧(想想状态),时间轴将为您完成所有工作,插入如何为提供的值之间的变化设置动画。例如,您可以给出一个节点的 x 属性为 0 的关键帧,另一个为 100 的关键帧,时间轴将为您制作动画。
看看使用Timeline Animation。它是 JavaFX 中动画的关键组件,
用于确定动画的关键部分何时以及以何种顺序发生。
这是一个例子