【问题标题】:Java AnimationTimer content not showingJava AnimationTimer 内容未显示
【发布时间】:2018-03-19 10:52:35
【问题描述】:

我正在尝试学习 JavaFX 动画的工作原理,因此我尝试根据以下教程创建一个地球绕圈运动的动画:https://gamedevelopment.tutsplus.com/tutorials/introduction-to-javafx-for-game-development--cms-23835

出于某种原因,我想展示的场景设置在舞台上,但图形或动画却没有。我很确定这是微不足道的,我似乎找不到原因。这是我的主类代码:

public class Main extends Application {

    private static Stage stage;
    private static Window window;
    private static Scene scWindow;


    @Override
    public void start(Stage primaryStage) {
        stage = primaryStage;
        stage.setTitle("Animation");
        showWindow();       
        stage.show();
    }

    public static void showWindow() {
        window = new Window();
        scWindow = new Scene(window, 400, 400);
        stage.setScene(scWindow);
    }

    public static void main(String[] args) {
        launch(args);
    }
}

这是Window类的代码:

public class Window extends BorderPane {

    final long startNanoTime = System.nanoTime();
    Image earth = new Image("http://icdn.pro/images/en/g/o/google-earth-icone-8927-128.png");
    Image space = new Image("https://space-facts.com/wp-content/uploads/magellanic-clouds.png");
    GraphicsContext gc;

    public Window() {
        Group root = new Group();
        Canvas canvas = new Canvas(512, 512);
        gc = canvas.getGraphicsContext2D();
        root.getChildren().add(canvas);
        gc.setFill(Color.BLACK);
        Anim a = new Anim();
        a.start();

    }

    private class Anim extends AnimationTimer {
        public void handle(long currentNanoTime)
        {
            double t = (currentNanoTime - startNanoTime) / 1000000000.0; 

            double x = 232 + 128 * Math.cos(t);
            double y = 232 + 128 * Math.sin(t);

            gc.drawImage( space, 0, 0 );
            gc.drawImage( earth, x, y );
        }
    }
}

没有抛出异常或任何东西,我不知道出了什么问题。

编辑: 我知道我没有在构造函数中的 setCenter/Left 等中放置任何东西,所以实际上如果是这个原因,我应该如何放置动画,例如在边框窗格的中心?

【问题讨论】:

    标签: java animation javafx


    【解决方案1】:

    您忘记将root 添加到场景中。添加类似的东西

    setCenter(root);
    

    Window的构造函数。

    或者干脆以Canvas为中心:

    public Window() {
        Canvas canvas = new Canvas(512, 512);
        gc = canvas.getGraphicsContext2D();
        setCenter(canvas);
        gc.setFill(Color.BLACK);
        Anim a = new Anim();
        a.start();
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2018-02-11
      • 2013-06-25
      相关资源
      最近更新 更多