2016-12-24 10 views
2

Изображение (здесь узел с именем hero) перемещается в соответствии с нажатой клавишей KEY. Но используется метод с именем getBoundsInLocal(). Я не могу понять цель этого метода. Помогает ли это получить ширину и высоту изображения?javaFX- что такое getBoundsInLocal(), метод getBoundsInParent()?

private void moveHeroBy(int dx, int dy) { 
    if (dx == 0 && dy == 0) return; 

    final double cx = hero.getBoundsInLocal().getWidth()/2; 
    final double cy = hero.getBoundsInLocal().getHeight()/2; 

    double x = cx + hero.getLayoutX() + dx; 
    double y = cy + hero.getLayoutY() + dy; 

    moveHeroTo(x, y); 
} 

private void moveHeroTo(double x, double y) { 
    final double cx = hero.getBoundsInLocal().getWidth()/2; 
    final double cy = hero.getBoundsInLocal().getHeight()/2; 

    if (x - cx >= 0 && 
     x + cx <= W && 
     y - cy >= 0 && 
     y + cy <= H) { 
     hero.relocate(x - cx, y - cy); 
    } 
} 

Этот метод вызывается с помощью AnimationTimer по этому пути:

AnimationTimer timer = new AnimationTimer() { 
     @Override 
     public void handle(long now) { 
      int dx = 0, dy = 0; 

      if (goNorth) dy -= 1; 
      if (goSouth) dy += 1; 
      if (goEast) dx += 1; 
      if (goWest) dx -= 1; 
      if (running) { dx *= 3; dy *= 3; } 

      moveHeroBy(dx, dy); 
     } 
    }; 
    timer.start(); 

Я нашел подобный метод с именем getBoundsInParent(). что делают эти два метода & В чем отличия?

ответ

3
  • getBoundsInLocal возвращает границы Node в собственной системе координат.
  • getBoundsInParent возвращает границы после их корректировки в зависимости от трансформации/layoutX/layoutY.

Оба они могут быть использованы для определения размера, но размер которых вам нужно определяется системой координат, которую вы используете ...

Пример

Rectangle rect = new Rectangle(100, 200); 
rect.setLayoutX(11); 
rect.setLayoutY(33); 
rect.setScaleX(2); 

Pane root = new Pane(); 
root.getChildren().add(rect); 
System.out.println(rect.getBoundsInLocal()); 
System.out.println(rect.getBoundsInParent()); 

отпечатки

BoundingBox [minX:0.0, minY:0.0, minZ:0.0, width:100.0, height:200.0, depth:0.0, maxX:100.0, maxY:200.0, maxZ:0.0] 
BoundingBox [minX:-39.0, minY:33.0, minZ:0.0, width:200.0, height:200.0, depth:0.0, maxX:161.0, maxY:233.0, maxZ:0.0] 

Для нетрансформированного ImageView вы можете определить размер используя размер по viewport «s или, если это свойство установлено в nullwidth/height из image используется с ImageView

+0

Итак, для образа, который преобразующей я должен использовать getBoundsInLocal() в противном случае окно просмотра будет делать работу? –

 Смежные вопросы

  • Нет связанных вопросов^_^