在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和
中动画的关键组成部分用于确定动画的何时以及以何种顺序出现。
这是一个示例