JavaFX Layout в родительском элементе

332
11 января 2018, 22:03

Доброго времени суток! Столкнулся со следующей проблемой: Пишу игру на JavaFX. Реализую движение персонажа. В пример возьмем этот код:

   public void start(Stage stage) {
   double sHeight =  Toolkit.getDefaultToolkit().getScreenSize().getHeight();
   double sWidth =  Toolkit.getDefaultToolkit().getScreenSize().getWidth();
    Pane root = new Pane();
        Pane ground = new Pane();
        ground.setMinSize(1500, 1500);
        ground.setMaxSize(1500, 1500);
        ground.setBackground(new Background(new BackgroundFill(Color.BLACK, CornerRadii.EMPTY, Insets.EMPTY)));
            Pane player = new Pane();
            player.setMinWidth(50);
            player.setMinHeight(50);
            player.relocate((sWidth / 2) - 25, (sHeight / 2) - 25);
            player.setBackground(new Background(new BackgroundFill(Color.DARKGREEN, CornerRadii.EMPTY, Insets.EMPTY)));
        ground.getChildren().addAll(player);
    root.getChildren().addAll(ground);
    Scene scene = new Scene(root, sWidth, sHeight);
    PerspectiveCamera camera = new PerspectiveCamera(false);
        camera.relocate(0, 0);
    scene.setCamera(camera);
    scene.setOnKeyPressed((KeyEvent ke) -> {
        switch (ke.getCode()) {
                case UP:    
                    player.setLayoutY(player.getLayoutY() - 1); 
                    camera.setLayoutY(camera.getLayoutY() - 1); 
                    break;
                case DOWN:  
                    player.setLayoutY(player.getLayoutY() + 1); 
                    camera.setLayoutY(camera.getLayoutY() + 1);
                    break;
                case LEFT:  
                    player.setLayoutX(player.getLayoutX() - 1);
                    camera.setLayoutX(camera.getLayoutX() - 1);
                    break;
                case RIGHT: 
                    player.setLayoutX(player.getLayoutX() + 1);
                    camera.setLayoutX(camera.getLayoutX() + 1);
                    break;
                case I: 
                    System.out.println("PX - " + player.getLayoutX());
                    System.out.println("PY - " + player.getLayoutY());
                    System.out.println();
                    System.out.println("Width - " + ground.getWidth());
                    System.out.println("Height - " + ground.getHeight());
                    System.out.println();
                    break;
            }
    });
    stage.setScene(scene);
    stage.setResizable(false);
    stage.setY(0);
    stage.setX(0);
    stage.alwaysOnTopProperty();
    stage.initStyle(StageStyle.UNDECORATED);
    stage.show();
}

Если мы будем перемещаться в одну сторону,то со временем мы достигнем её предела,и пересечем его. Самое интересное,что размер Pane не изменится. Теперь,собственно вопрос - имеется ли какая-либо возможность ограничения перемещения дочернего объекта в родительском,опираясь на размеры родительского? Я понимаю,что можно через if ограничить,но существуют ли какие-либо другие способы сделать это? Так же,очень интересна логика вот этого момента,так как странно,что объект,который мы помещаем в другой объект,может пересекать границы родительского.

READ ALSO
Java 8 stream groupingBy

Java 8 stream groupingBy

Подскажите как преобразовать:

279
Сокеты. Прием и отдача данных. Андроид

Сокеты. Прием и отдача данных. Андроид

Есть клиент(андроид прил) и Сервер(Ява прога)

224
CRUD операции в Realm + RXJava

CRUD операции в Realm + RXJava

Дело в том что я до этого удалял и обновлял записи в Realm таким образом:

235
Размещение виджета ниже ListView

Размещение виджета ниже ListView

Как разместить TextView ниже ListView ?

213