1

C ++またはCプログラミング言語では、gotoxy(x、y)を使用して座標を変更することがわかっており、ループとスリープを使用して座標を変更し、アニメーションを作成できます。このような;

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

しかし、私の質問は、JAVAFX 2.0プログラミングではどうですか?私はnetbeans7.2を使用しています。助けてくれてありがとう。

4

3 に答える 3

3

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; }
  }
}
于 2012-10-25T00:43:45.510 に答える
2

JavaFXには、ニーズに応じて3つの異なるオプションがあります。

最も基本的なものはAnimationTimerです。これはSwingのタイマーに相当します。フレームごとに呼び出され、引数として現在の時刻が渡されるハンドルメソッドが含まれているだけです。ハンドルが呼び出されるたびに高価な計算を行わないように、内部の簿記が必要になる可能性があります。

Transitionにはinterpolate(frac)メソッドがあり、0.0〜1.0のfracの値で呼び出されます。frac値に基づいて、必要なすべてのUI変更を行うのはあなた次第です。トランジションとタイムラインはどちらもアニメーションを拡張するため、サイクル期間、トランジションが最後に反転されるかどうかなどを設定できます。

タイムラインは最も複雑なものです。さまざまなノードの必要なプロパティを含む任意の量のKeyFrame(状態を考えてください)を定義すると、タイムラインがすべての作業を行い、提供された値間の変更をアニメーション化する方法を補間します。たとえば、ノードのxプロパティが0のキーフレームと、100のキーフレームを指定すると、タイムラインがアニメーションを実行します。

于 2013-03-30T18:15:21.150 に答える
1

タイムラインアニメーションの使用をご覧ください。これは、JavaFXのアニメーションの重要なコンポーネントであり、アニメーションの
重要な部分がいつ、どのような順序で発生するかを確立するために使用されます。

これが例です

于 2012-10-23T12:07:50.867 に答える