11

关于JavaFX,我有以下问题:

  1. 我是否需要在节点上使用 setCache(true) 来获得由 setCacheHint() 设置的缓存提示才能真正发挥作用?

  2. 调用 setCache 是否应该在某些时间或大部分时间实际提高性能,即帧速率?当我使用 setCache(true) 并应用缩放和其他转换时,我无法观察到帧速率的任何变化。

4

1 回答 1

15

我是否需要在节点上使用 setCache(true) 来获得由 setCacheHint() 设置的缓存提示才能真正发挥作用?

是的。

缓存属性提示系统是否应该缓存节点渲染(作为内部图像)。

cacheHint属性是对系统的提示,说明节点上需要进行哪些变换,以便可以针对这些变换类型优化缓存操作(例如,缓存提示旋转、缩放或速度等)。

如果节点根本没有被设置为缓存,cacheHint 是无关紧要的。

调用 setCache 是否应该在某些时间或大部分时间实际提高性能,即帧速率?

不必要。JavaFX 的默认帧速率上限为 60fps,因此如果性能足够好,即使没有任何缓存提示也能达到帧速率,您不会看到任何明显的差异。许多基本动画和变换都是这种情况。

即使帧速率没有提高,缓存提示也可能使每个转换的执行效率更高一些,从而减少 CPU 或 GPU 密集度(通常通过交易视觉质量)。

可能还有其他事情对您的帧速率有更大的影响。这些事情可能与可缓存项目的渲染速度无关(例如,在游戏循环期间在 JavaFX 应用程序线程上执行的长时间运行操作或不断变化的节点内容)。


我在我编写的小游戏中使用了组合setCache(true)和组合,setCacheHint(CacheHint.SPEED)这些游戏具有多个同时动画节点,具有多种效果和应用于节点的半透明。这些设置确实加快了很多速度(Mac OS X、Macbook Air 2012、Java FX 2.2)。


您也可以手动拍摄节点树的快照,并手动将节点树替换为快照图像,而不是依赖于渲染系统的提示。这种快照技术并不总是最好的方法,但如果提示在您的情况下效果不佳,它确实为您提供了替代方案。

于 2013-09-20T08:10:47.747 回答