SubScene камера наложение - PullRequest
       7

SubScene камера наложение

0 голосов
/ 10 июля 2019

Я пытаюсь создать мир с объектами, которые могут двигаться и взаимодействовать друг с другом, сверху вниз. Я также хочу увеличивать и уменьшать масштаб, чтобы видеть больше и меньше мира. Поэтому мне нужна подцена мира, наложение с пользовательским интерфейсом и другой информацией и камера, которая не влияет на пользовательский интерфейс, но может перемещаться влево-вправо вниз и увеличивать масштаб в зависимости от того, где находится объект игрока.

Я пытался сделать мир главной сценой, а также подцелью. В настоящее время у меня есть подсцена, где должна быть камера, которая может масштабировать и т. Д., И первая сцена имеет зелёный кружок в качестве основы пользовательского интерфейса, но я не могу перемещать объекты внутри подцены, как мог бы когда они были в первой сцене.

@ 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;
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...