Я пытаюсь создать мир с объектами, которые могут двигаться и взаимодействовать друг с другом, сверху вниз. Я также хочу увеличивать и уменьшать масштаб, чтобы видеть больше и меньше мира. Поэтому мне нужна подцена мира, наложение с пользовательским интерфейсом и другой информацией и камера, которая не влияет на пользовательский интерфейс, но может перемещаться влево-вправо вниз и увеличивать масштаб в зависимости от того, где находится объект игрока.
Я пытался сделать мир главной сценой, а также подцелью. В настоящее время у меня есть подсцена, где должна быть камера, которая может масштабировать и т. Д., И первая сцена имеет зелёный кружок в качестве основы пользовательского интерфейса, но я не могу перемещать объекты внутри подцены, как мог бы когда они были в первой сцене.
@ 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;
}
}