Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaFX中设置大量图形元素动画的最快方法_Java_Canvas_Javafx_Java 8_Vector Graphics - Fatal编程技术网

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

在JavaFX中设置大量图形元素动画的最快方法,java,canvas,javafx,java-8,vector-graphics,Java,Canvas,Javafx,Java 8,Vector Graphics,我在JavaFX中迈出了第一步。我想用javafx制作很多图形元素(椭圆、贝塞尔曲线,而不是图像)的动画。这些元素以大约10个元素为一组进行组织,这些元素必须一起移动。我试图达到60 fps,我想移动数千个这样的元素 至少有四种方法可以做到这一点: 使用单个画布及其图形上下文在每个帧上直接绘制 使用组和节点。每个元素都是一个节点。我喜欢这种方式,因为有很多类可以用来轻松地绘制我需要的内容,而节点和组的逻辑结构正是我需要的 每组都是画布。使用画布图形上下文在其构造函数中绘制其元素,然后在每个帧上

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

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

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

我的问题是,以下哪种方法(或其他方法)是最快的方法?特别是,使用大量节点和组是否会对性能产生高影响?

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

我没有注意到缓存提示。将尝试并报告。在缓存激活和缓存提示设置为速度的情况下,我可以旋转2000多个重叠组,保持60 FPS的速率。不错:)