setCache()和CacheHint如何在JavaFX中协同工作?

关于JavaFX,我有以下问题:

  1. 我是否需要在Node上使用setCache(true)来为setCacheHint()设置的缓存提示实际产生任何效果?

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

我是否需要在Node上使用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)。


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