在JavaFX中动画大量图形元素的最快方法

joa*_*anq 4 java javafx canvas vector-graphics java-8

我正在迈出JavaFX的第一步.我想用javafx为很多图形元素(椭圆,贝塞尔曲线,而不是图像)制作动画.这些元素由大约10个元素组成,这些元素必须一起移动.我试图达到60 fps,我想移动数以千计的这些元素.

至少有四种方法可以做到这一点:

  • 使用单个画布及其图形上下文直接在每个帧上绘制.
  • 使用组和节点.每个元素都是一个节点.我喜欢这种方式,因为有很多类可以用来轻松地绘制我需要的东西,节点和组的逻辑结构正是我所需要的.
  • 每组都是画布.使用画布图形上下文在其构造函数中绘制其元素,然后移动每个帧的所有画布.
  • 使用必须粘在一起的元素创建图像,然后移动这些图像.我还没有找到如何做到这一点,但我想这并不难.元素可能会不时变化,因此我需要重新创建一些图像,但只需要偶尔重复一次.

我的问题是,这些方式中的哪一种(或另一种方式)是最快的方式?特别是,许多节点和组的使用是否具有很高的性能影响?

mip*_*ipa 5

我会从选项二开始,因为这似乎在逻辑上最符合您的需求.它也是使用JavaFX进行此操作的最直接,最干净的方式.如果后来证明性能不够好,您可以尝试通过使用缓存和适当的缓存提示来改进这一点.例如,您可以通过这种方式优化代码的速度或质量.这甚至可以动态运行,因为您可以根据应用程序的状态在这些缓存提示之间切换.如果为组切换缓存,则与将其绘制到画布或图像中的效果基本相同.