繁体   English   中英

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

[英]How do setCache() and CacheHint work together in 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手动替换节点树,而不是依赖于渲染系统的提示。 这种快照技术并不总是最好的方法,但如果提示在您的情况下效果不佳,它确实可以为您提供替代方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM