规模转型破坏内心阴影

时间:2016-07-15 16:52:54

标签: javafx scaletransform

内部阴影在过渡期间消失,看起来内部阴影也会缩放。

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();
}

1 个答案:

答案 0 :(得分: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);