使用JavaFX移动节点DropShadow会留下痕迹

时间:2017-11-17 03:01:30

标签: java javafx javafx-8 dropshadow

在我正在JavaFX中工作的游戏中,我有Label s的卡片(DropShadow s)。卡片可以移动,当它们移动时,阴影会留下一条微弱的痕迹。我已经尝试使用Node#setCache(boolean),这有效,但模糊了标签中的文字。

还有其他方法可以阻止DropShadow离开小道吗?

这是一个带有结果的MCVE:

public class DropShadowTest extends Application {

    @Override
    public void start(final Stage stage) throws Exception {
        final Label label = new Label("Hello, world!");
        label.setBackground(new Background(new BackgroundFill(Color.LIGHTGRAY, new CornerRadii(10), Insets.EMPTY)));
        label.setEffect(new DropShadow(3, 0, 1, Color.BLACK));
        label.setMaxSize(100, 100);
        label.setMinSize(100, 100);

        stage.setScene(new Scene(new StackPane(label), 640, 480));
        stage.show();

        label.setOnMouseClicked(event -> {
            final TranslateTransition anim = new TranslateTransition(Duration.seconds(1), label);
            anim.setToX(Math.random() * 500 - 250);
            anim.setToY(Math.random() * 300 - 150);
            anim.play();
        });
    }

    public static void main(final String[] args) {
        Application.launch(args);
    }

}

结果: Drop shadow trails

谢谢!

1 个答案:

答案 0 :(得分:1)

尝试将{strong>缓存与Cache hints一起使用,例如,在开始设置动画之前,请将缓存提示设置为SPEED 完成动画后,切换回QUALITY,它将重新渲染您的节点(如摆动中的重绘())