我试图创建一个滚动的背景效果与两个图片视图,其中一张图片是在另一张图片的顶部和窗外;然后我尝试通过改变它们的y坐标来向下滚动窗口以创建滚动效果。我做了一个循环这样做,并把一个线程。睡眠,所以它不会做得太快。然后我重置picutres的位置,再做一次循环。但是,当我尝试运行程序时,窗口将永远不会打开。取出循环显然正确地显示了带有picutre的窗口。
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条答案
按热度按时间vpfxa7rd1#
你的循环不是正确的做法。在每个imageview上使用过渡动画。你想要翻译。
像这样:
如果你的目的是让这些图像作为一个视差背景,滚动“永远”,设置过渡周期无限期
每种方法的持续时间略有不同。
如果使用相同的图像,请不要加载两次:
以下是添加速度滑块的整个启动方法,只是为了好玩: