Как я могу создать один образ поверх другого в JavaFX и снова изменить его в ActionTimer? - PullRequest
0 голосов
/ 04 мая 2019

Я хочу поместить изображение «земля», которое движется вверх и вниз, перед изображением «солнце», чтобы оно создавало 3D-эффект.

Я уже пытался использовать setBlendMode, но, видимо, это не работает для изображений.

Это мой код:

theStage.setTitle( "Timeline Example" );

        Group root = new Group();
        Scene theScene = new Scene( root );
        theStage.setScene( theScene );

        Canvas canvas = new Canvas( 512, 512 );
        root.getChildren().add( canvas );

        GraphicsContext gc = canvas.getGraphicsContext2D();

        Image earth = new Image( "/experiment/img/earth.png" );
        Image sun   = new Image( "/experiment/img/sun.png" );
        Image space = new Image( "/experiment/img/space.png" );

        final long startNanoTime = System.nanoTime();

        new AnimationTimer()
        {
            public void handle(long currentNanoTime)
            {
                double t = (currentNanoTime - startNanoTime) / 1000000000.0;

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

                // background image clears canvas
                gc.drawImage( space, 0, 0 );
                gc.drawImage( earth, x, y );
                gc.drawImage( sun, 196, 196 );
            }
        }.start();

        theStage.show();
    }

Как я могу сделать землю над солнцем каждый раз, когда оно садится?

earth.png

sun.png

space.png

1 Ответ

1 голос
/ 02 июля 2019

Я искал функции toBack () и toFront (), которые делают именно то, что говорят. Они помещают ImageView или любой другой узел в задний / передний план. И я больше не использую холст. Я нашел их благодаря моему учителю Java.

...