我正在尝试创建一个可以自上而下移动并相互影响的对象的世界。我也想放大和缩小,以查看越来越少的世界。因此,我需要一个世界的子场景,一个带有UI和其他信息的覆盖层,以及一个不会影响UI,但可以根据播放器对象的位置向左上右下移动并缩放的摄像头。
我尝试将世界作为主要场景,也将其作为子场景。目前,我有一个世界作为子场景,应该是摄像机所在的位置并且可以缩放等,并且第一个场景上有一个绿色圆圈作为UI的基础,但是我无法像我那样在子场景中移动对象当他们在第一个场景时。
@Override public void start(Stage primaryStage){
Random rand = new Random(50);
Circle circle2 = new Circle(800, 450, 20);
circle2.setCenterX(800);
circle2.setCenterY(450);
circle2.setFill(Color.GREEN);
circle2.setVisible(true);
Pane root = new Pane(circle2);
overlayTest(root);
Scene scene = new Scene(root, 1600, 900);
scene.setFill(Color.rgb(20, 255, 231, 0.6));
Image sea = new Image("file:seaTest2.jpg");
ImagePattern pattern = new ImagePattern(sea);
scene.setFill(pattern);
primaryStage.setScene(scene);
primaryStage.setTitle("Camera!");
primaryStage.show();
}
private SubScene overlayTest(Pane root) {
ObservableSet<KeyCode> downKeys = FXCollections.observableSet();
Circle circle2 = new Circle(200, 200, 20);
circle2.setCenterX(200);
circle2.setCenterY(200);
circle2.setFill(Color.GREEN);
circle2.setVisible(true);
root.getChildren().add(circle2);
SubScene overlay = new SubScene(root, 1600, 900);
overlay.setVisible(true);
overlay.setOpacity(0.1);
PerspectiveCamera camera = new PerspectiveCamera(true);
camera.setTranslateZ(-700);
camera.setNearClip(0.1);
camera.setFarClip(2000.0);
camera.setFieldOfView(35);
overlay.setCamera(camera);
Timeline timer = new Timeline(new KeyFrame(
javafx.util.Duration.millis(16), ae -> {
downKeys.stream().parallel().forEach(kc -> {
Platform.runLater(() -> {
switch (kc) {
case C:
camera.setTranslateZ(camera.getTranslateZ() - 5);
break;
case Z:
camera.setTranslateZ(camera.getTranslateZ() + 5);
break;
case W:
camera.setTranslateY(camera.getTranslateY() - 5);
break;
case A:
camera.setTranslateX(camera.getTranslateX() - 5);
break;
case S:
camera.setTranslateY(camera.getTranslateY() + 5);
break;
case D:
camera.setTranslateX(camera.getTranslateX() + 5);
break;
}
});
});
}));
timer.setCycleCount(Animation.INDEFINITE);
timer.play();
downKeys.addListener((SetChangeListener.Change<? extends KeyCode> change) -> {
});
return overlay;
}
}