在 JavaFX 中为大量图形元素设置动画的最快方法
fastest way to animate a lot of graphic elements in JavaFX
我正在迈出 JavaFX 的第一步。我想用 javafx 为很多图形元素(椭圆、贝塞尔曲线,而不是图像)制作动画。这些元素被组织成大约 10 个元素的组,这些元素必须一起移动。我正在尝试达到 60 fps,并且我想移动数千个这些元素。
至少有四种方法可以做到这一点:
- 使用单个 canvas 及其图形上下文直接在每一帧绘制。
- 使用组和节点。每个元素都是一个节点。我喜欢这种方式,因为有很多类可以很容易地画出我需要的东西,节点和组的逻辑结构正是我需要的
- 每组是一个canvas。使用 canvas 图形上下文在其构造函数中绘制其元素,然后在每一帧移动所有 canvases。
- 用必须粘在一起的元素创建图像,然后移动这些图像。我还没有找到如何做到这一点,但我想这并不难。元素可能会不时更改,因此我需要重新创建一些图像,但只是偶尔一次。
我的问题是,这些(或其他)方法中哪一种是最快的方法?特别是,使用大量的节点和组对性能有影响吗?
我将从选项二开始,因为这在逻辑上似乎最符合您的需求。这也是使用 JavaFX 执行此操作的最直接和最干净的方法。如果后来发现性能不够好,您可以尝试通过结合使用缓存和适当的缓存提示来改进它。例如,您可以通过这种方式优化代码的速度或质量。这甚至可以动态工作,因为您可以根据应用程序的状态在这些缓存提示之间切换。如果您为一个组打开缓存,这与将其绘制到 canvas 或图像中的效果基本相同。
我正在迈出 JavaFX 的第一步。我想用 javafx 为很多图形元素(椭圆、贝塞尔曲线,而不是图像)制作动画。这些元素被组织成大约 10 个元素的组,这些元素必须一起移动。我正在尝试达到 60 fps,并且我想移动数千个这些元素。
至少有四种方法可以做到这一点:
- 使用单个 canvas 及其图形上下文直接在每一帧绘制。
- 使用组和节点。每个元素都是一个节点。我喜欢这种方式,因为有很多类可以很容易地画出我需要的东西,节点和组的逻辑结构正是我需要的
- 每组是一个canvas。使用 canvas 图形上下文在其构造函数中绘制其元素,然后在每一帧移动所有 canvases。
- 用必须粘在一起的元素创建图像,然后移动这些图像。我还没有找到如何做到这一点,但我想这并不难。元素可能会不时更改,因此我需要重新创建一些图像,但只是偶尔一次。
我的问题是,这些(或其他)方法中哪一种是最快的方法?特别是,使用大量的节点和组对性能有影响吗?
我将从选项二开始,因为这在逻辑上似乎最符合您的需求。这也是使用 JavaFX 执行此操作的最直接和最干净的方法。如果后来发现性能不够好,您可以尝试通过结合使用缓存和适当的缓存提示来改进它。例如,您可以通过这种方式优化代码的速度或质量。这甚至可以动态工作,因为您可以根据应用程序的状态在这些缓存提示之间切换。如果您为一个组打开缓存,这与将其绘制到 canvas 或图像中的效果基本相同。