C ++またはCプログラミング言語では、gotoxy(x、y)を使用して座標を変更することがわかっており、ループとスリープを使用して座標を変更し、アニメーションを作成できます。このような;
for(x = 20; x < 25; x++){
gotoxy(x,20); cout << "*"
}
しかし、私の質問は、JAVAFX 2.0プログラミングではどうですか?私はnetbeans7.2を使用しています。助けてくれてありがとう。
JavaFXアニメーションパッケージを使用します。
Andyがコメントで指摘したように、 JavaFXアニメーションチュートリアルには多数の例があります。
そして、走っている馬のアニメーションループのかわいい例があります。
重要なのは、JavaFXアプリケーションスレッドをスリープ状態にせず、何かを更新してレンダリングするたびに、JavaFXスレッドの制御を解放してJavaFXシステムに戻す必要があるということです。JavaFXアニメーションクラスは、これらのことを処理してくれるので、心配する必要はありません。質問のサンプルコードのようにループする場合、JavaFXは、ループが完了した後にシーンを1回レンダリングするだけであり、何も起こらないことはありません。
これは、タイムラインを使用して質問のc ++コードをエミュレートし、400ミリ秒ごとに1ピクセルのドットを移動するかなり退屈な例です。
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には、ニーズに応じて3つの異なるオプションがあります。
最も基本的なものはAnimationTimerです。これはSwingのタイマーに相当します。フレームごとに呼び出され、引数として現在の時刻が渡されるハンドルメソッドが含まれているだけです。ハンドルが呼び出されるたびに高価な計算を行わないように、内部の簿記が必要になる可能性があります。
Transitionにはinterpolate(frac)メソッドがあり、0.0〜1.0のfracの値で呼び出されます。frac値に基づいて、必要なすべてのUI変更を行うのはあなた次第です。トランジションとタイムラインはどちらもアニメーションを拡張するため、サイクル期間、トランジションが最後に反転されるかどうかなどを設定できます。
タイムラインは最も複雑なものです。さまざまなノードの必要なプロパティを含む任意の量のKeyFrame(状態を考えてください)を定義すると、タイムラインがすべての作業を行い、提供された値間の変更をアニメーション化する方法を補間します。たとえば、ノードのxプロパティが0のキーフレームと、100のキーフレームを指定すると、タイムラインがアニメーションを実行します。
タイムラインアニメーションの使用をご覧ください。これは、JavaFXのアニメーションの重要なコンポーネントであり、アニメーションの
重要な部分がいつ、どのような順序で発生するかを確立するために使用されます。
これが例です