2016-07-15 10 views
0

Внутренняя тень исчезает во время перехода, похоже, что внутренняя тень также масштабируется.Масштаб перехода разрушает внутреннюю тень

public void showTowerRange(int x0, int y0, double range) { 
    Circle circle = new Circle(
      x0 * MAP_CELLS_WIDTH + MAP_CELLS_WIDTH/2, 
      y0 * MAP_CELLS_HEIGHT + MAP_CELLS_HEIGHT/2, 
      1, 
      Color.RED 
    ); 
    circle.setOpacity(0.5); 
    gameRoot.getChildren().add(circle); 

    ScaleTransition scl = new ScaleTransition(Duration.millis(SHOW_RANGE_EFFECT_DURATION),circle); 
    scl.setByX(range * MAP_CELLS_WIDTH); 
    scl.setByY(range * MAP_CELLS_HEIGHT); 

    FadeTransition fd = new FadeTransition(Duration.millis(SHOW_RANGE_EFFECT_DURATION),circle); 
    fd.setByValue(-.3); 

    circle.setEffect(new InnerShadow(BlurType.GAUSSIAN, Color.GREEN, 4, 1, 0, 0)); 
    circle.setEffect(new DropShadow(BlurType.GAUSSIAN, Color.WHITE, 2, 0, 0, 0)); 
    ParallelTransition prl = new ParallelTransition(scl,fd); 
    prl.play(); 
} 

ответ

0

Ну, у меня есть хорошие новости и плохие новости для вас. Хороший одномасштабный переход не разрушает внутреннюю тень. Плохой - это вы разрушаете внутреннюю тень :)
Дело в том, что метод setEffect() не добавляет другого эффекта, он просто устанавливает свойство эффекта узла, заменяя предыдущее значение. Что вам нужно сделать, это связать эффекты (см. Пример here). Таким образом, вместо этого:

circle.setEffect(new InnerShadow(BlurType.GAUSSIAN, Color.GREEN, 4, 1, 0, 0)); 
circle.setEffect(new DropShadow(BlurType.GAUSSIAN, Color.WHITE, 2, 0, 0, 0)); 

Вы должны сделать это:

InnerShadow is = new InnerShadow(BlurType.GAUSSIAN, Color.GREEN, 4, 1, 0, 0); 
DropShadow ds = new DropShadow(BlurType.GAUSSIAN, Color.WHITE, 2, 0, 0, 0); 
ds.setInput(is); 
circle.setEffect(ds);