JavaFX 中的动画渲染效果
Posted
技术标签:
【中文标题】JavaFX 中的动画渲染效果【英文标题】:Animate Render Effects in JavaFX 【发布时间】:2016-01-16 05:38:28 【问题描述】:我正在构建一个 JavaFX 应用程序,它应该在我的 RaspberryPi 上运行,该树莓派连接了一个 7" 显示器。
为了更好的造型,我正在尝试为javafx.scene.effect.GaussianBlur
-Effect 制作动画。
我让它“工作”了,尽管目前性能很差(动画期间的 FPS 低)(在我的笔记本电脑上,甚至不说 Pi)。请参阅下面的代码。
有没有更高效的方法来做到这一点?还是这些效果不应该是动画的?
GaussianBlur blur = new GaussianBlur(0);
backgroundPane.setEffect(blur);
DoubleProperty value = new SimpleDoubleProperty(0);
value.addListener((observable, oldV, newV)->
blur.setRadius(newV.doubleValue());
);
Timeline timeline = new Timeline();
final KeyValue kv = new KeyValue(value, 30);
final KeyFrame kf = new KeyFrame(Duration.millis(200), kv);
timeline.getKeyFrames().add(kf);
timeline.play();
仅供参考:在这个阶段,bakcgroundPlane
只是一个通过 CSS 添加背景图像的窗格:
.background
-fx-background-image: url("images/bg.png");
-fx-background-repeat: stretch;
-fx-background-size: 800 480;
-fx-background-position: center center;
编辑: 问题似乎与 CSS 无关。当我在 FXML 中设置图像时,它仍然会发生......
【问题讨论】:
是否有任何具体原因定义 DoubleProperty 与您动画的 changeListener 以强制更改半径?直接在 GaussianBlur 上使用 radiusProperty。 如果您提供mcve,您将有更好的机会获得帮助。我知道您当前的问题有足够的信息,有人可以复制它,但目前有人这样做比将最小的、完整的、工作的、可编译的代码复制并粘贴到他们的机器上做的工作更多。如果潜在的回答者需要做更多的工作来复制您的问题,那么您获得好的答案的机会就会减少。 【参考方案1】:你试过enable caching和set the cache hint to speedy吗?
这些通常会对性能产生巨大影响。在我的一个小型 jfx 游戏中,它是“可玩”和个位数 fps 值之间的差异。
【讨论】:
以上是关于JavaFX 中的动画渲染效果的主要内容,如果未能解决你的问题,请参考以下文章
超给力的json格式Web动画工具 一键渲染动画效果(内含使用教程)