![](/img/trans.png)
[英]How do clearFocus() and focusableInTouchMode=“true” work together?
[英]How do setCache() and CacheHint work together in JavaFX?
关于JavaFX,我有以下问题:
我是否需要在Node上使用setCache(true)来设置由setCacheHint()设置的缓存提示才能实际产生任何效果?
是否应该调用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.