当前位置: 首页 > 知识库问答 >
问题:

尝试在javafx中使用ImageView创建滚动背景效果

凤高澹
2023-03-14

我试图用两个图像视图创建一个滚动背景效果,其中一张图片位于另一张图片的上方,并在窗口外;然后,我尝试通过改变它们的y坐标,在窗口中向下滚动,以创建滚动效果。我做了一个循环,然后放了一根线。睡觉,这样它就不会做得太快。然后我重置picutres的位置,然后再做一次循环。然而,当我试图运行该程序时,窗口永远不会打开。取出循环显然正确地显示了带有图片的窗口。

public class TestBackground extends Application{

@Override
public void start(Stage stage) throws Exception {
    
    stage.setTitle("DRIFT STAGE");
    
    Pane game = new Pane();
    Scene gameScene = new Scene(game, 956, 740);
    ImageView background = new ImageView(getClass().getResource("bg.png").toExternalForm());
    game.getChildren().add(background);
    
    ImageView background2 = new ImageView(getClass().getResource("bg.png").toExternalForm());
    game.getChildren().add(background2);        
    background2.setY(-740);
    
    //loop to scroll background vertically
    for (int j = 0; j < 20; j++) {
        for (double i = 1.0; i < 741.0; i++) {
            background.setY(background.getY() + i);
            background2.setY(background2.getY() + i);
            
            try {
                Thread.sleep(250);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        background.setY(0.0);
        background2.setY(-740.0);
    }
    
    stage.setScene(gameScene);
    stage.show();
    
    }
    public static void main(String[] args) { launch(args); }
}

共有1个答案

谷梁襦宗
2023-03-14

你的循环不是正确的选择。在每个ImageView上使用过渡动画。你想要翻译。

像这样的东西:

    // Animation to scroll background vertically
    TranslateTransition trans1 = new TranslateTransition(Duration.minutes(1), background);
    trans1.setFromY(0);
    trans1.setToY(740);
    trans1.setCycleCount(20);
    TranslateTransition trans2 = new TranslateTransition(Duration.minutes(1), background2);
    trans2.setFromY(-740);
    trans2.setToY(0);
    trans2.setCycleCount(20);
    ParallelTransition parTrans = new ParallelTransition(trans1, trans2);
    parTrans.play();

如果你想让这些图像作为视差背景“永远”滚动,请将转换设置为无限循环

    trans1.setCycleCount(Animation.INDEFINITE);

并对每个使用略有不同的持续时间。

如果您使用相同的图像,请不要加载两次:

    Image bgImg = new Image(getClass().getResource("bg.png").toExternalForm());
    ImageView background = new ImageView(bgImg);
    game.getChildren().add(background);

    ImageView background2 = new ImageView(bgImg);
    game.getChildren().add(background2);

以下是添加速度滑块的整个启动方法,只是为了好玩:

@Override
public void start(Stage stage) {

    stage.setTitle("DRIFT STAGE");

    Pane game = new Pane();
    Scene gameScene = new Scene(game, 956, 740);
    Image bgImg = new Image(getClass().getResource("bg.png").toExternalForm());
    ImageView background = new ImageView(bgImg);
    ImageView background2 = new ImageView(bgImg);
    Slider speedSlider = new Slider(0, 5, 1);
    game.getChildren().addAll(background, background2, speedSlider);

    // Animation to scroll background vertically
    TranslateTransition trans1 = new TranslateTransition(Duration.seconds(10), background);
    trans1.setFromY(0);
    trans1.setToY(740);
    trans1.setInterpolator(Interpolator.LINEAR);
    trans1.setCycleCount(Animation.INDEFINITE);
    TranslateTransition trans2 = new TranslateTransition(Duration.seconds(10), background2);
    trans2.setFromY(-740);
    trans2.setToY(0);
    trans2.setCycleCount(Animation.INDEFINITE);
    trans2.setInterpolator(Interpolator.LINEAR);
    ParallelTransition parTrans = new ParallelTransition(trans1, trans2);
    parTrans.rateProperty().bind(speedSlider.valueProperty());
    parTrans.play();

    stage.setScene(gameScene);
    stage.show();
}
 类似资料:
  • 我有一些关于滚动窗格的默认背景和边框的问题。使用这种风格使问题看得更清楚。 我试过这种风格,但没有运气,只有红色的边框消失了,留给我的是蓝色的。 我查看了这个旧的后JavaFX隐藏滚动窗格灰色边框和http://docs.oracle.com/JavaFX/2/ui_controls/editor.htm 这行代码也不起作用 谢谢

  • 我有一个透明图像(PNG)的ImageView,因此图像不会填充图像视图的完整矩形,当鼠标悬停在图像视图上时,我想只更改图像视图矩形的背景颜色。在css中我是怎么做的?图像视图节点是否具有属性-fx-背景颜色?我试过了,但对我来说不起作用。我有一个链接到的css文件。FXML

  • 我正在尝试创建背景色CSS3关键帧动画后的第一个动画,这是一个背景图像。我无法创建另一个动画后,文字动画淡出。文本动画褪色后,我想背景的不透明度转到0.3,并再次褪色在文本。下面是我所拥有的。 请在此处查看完整代码:codepen:https://codepen.io/imdaone/pen/jjryyv

  • 本文向大家介绍如何使用JavaFX创建滚动窗格?,包括了如何使用JavaFX创建滚动窗格?的使用技巧和注意事项,需要的朋友参考一下 滚动窗格包含一个UI元素,并提供它的可滚动视图。在JavaFX中,可以通过实例化javafx.scene.control.ScrollPane类来创建滚动窗格。您可以使用setContent()方法将内容设置到滚动窗格。 要将滚动窗格添加到节点- 实例化ScrollP

  • 我打算再试一次。。。我是Scenebuilder的新手,我正在尝试为我的项目创建一个照片库!我已经添加了我想要的,那就是一个图像视图,其中的图像是从FileChooser中选择的。。。但是现在我想得到一个建议,如何保存这个,并在每次按下addPhoto按钮时创建一个新的,而不是覆盖我在ImageView中已经有的。以下是我的addPhoto按钮代码: FXML代码:

  • 我的fxml文件中只有一个带有ImageView的AnchorPane,其中包含png图像 我到处找了,但找不到任何解决办法,任何帮助都不胜感激。谢谢