关于JavaFX,我有以下问题:
我是否需要在节点上使用 setCache(true) 才能让 setCacheHint() 设置的缓存提示真正起作用?
调用 setCache 是否真的可以提高性能,即部分或大部分时间的帧速率?当我使用 setCache(true) 并应用缩放和其他转换时,我无法观察到帧速率的任何变化。
最佳答案
Do I need to use setCache(true) on a Node for a cache hint set by setCacheHint() to actually have any effect?
是的。
cache属性向系统提示节点渲染是否应该缓存(作为内部图像)。
cacheHint属性向系统提示节点上期望进行哪些转换,以便可以针对这些转换类型优化缓存操作(例如,缓存提示旋转、缩放或速度等)。
如果节点根本没有设置缓存,则cacheHint是无关紧要的。
Should calling setCache actually improve performance i.e. frame rate some or most of the time?
不一定。 JavaFX 的默认帧速率上限为 60fps,因此如果性能足够好,即使没有任何缓存提示也能达到帧速率,您将不会看到任何明显的差异。许多基本动画和变换都是这种情况。
即使帧速率没有提高,缓存提示也可能使每个转换的执行效率更高一点,从而减少 CPU 或 GPU 密集度(通常通过牺牲视觉质量)。
可能还有其他因素对您的帧率影响更大。这些事情可能与可缓存项目的渲染速度无关(例如,在游戏循环期间在 JavaFX 应用程序线程上执行的长时间运行的操作或不断更改的节点内容)。
我在我编写的小游戏中使用了 setCache(true)
和 setCacheHint(CacheHint.SPEED)
的组合,这些小游戏具有多个同时具有多种效果的动画节点和半透明应用于节点。这些设置确实加快了速度(Mac OS X、Macbook Air 2012、Java FX 2.2)。
除了依赖渲染系统的提示,您还可以手动获取 snapshot。节点树并手动用快照图像替换节点树。这种快照技术并不总是最好的方法,但如果提示在您的情况下效果不佳,它确实可以为您提供替代方案。
关于java - setCache() 和 CacheHint 如何在 JavaFX 中协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18911186/