Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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_Animation_Canvas_Javafx - Fatal编程技术网

JavaFX画布高效动画

JavaFX画布高效动画,java,animation,canvas,javafx,Java,Animation,Canvas,Javafx,我正在使用JavaFX画布为形状和多段线对象随时间的运动设置动画。 当前,列表中每个图形或多段线的每一帧、X和Y的位置都会根据需要进行编辑,并移动对象。 这将导致约20-30fps的速度 我以前尝试过的一种方法只是在每一帧清除画布,然后重新绘制每个对象。不存储对象列表。 这将导致每秒60帧 第二种方法似乎是一种更为混乱的方法,但会产生更好的帧率 在JavaFX画布上制作动画有什么最佳实践或推荐的方法吗?有什么干净的和推荐的,但结果是一个好的帧率 非常感谢我刚刚在JavaLand会议上谈到了这些问

我正在使用JavaFX画布为形状和多段线对象随时间的运动设置动画。 当前,列表中每个图形或多段线的每一帧、X和Y的位置都会根据需要进行编辑,并移动对象。 这将导致约20-30fps的速度

我以前尝试过的一种方法只是在每一帧清除画布,然后重新绘制每个对象。不存储对象列表。 这将导致每秒60帧

第二种方法似乎是一种更为混乱的方法,但会产生更好的帧率

在JavaFX画布上制作动画有什么最佳实践或推荐的方法吗?有什么干净的和推荐的,但结果是一个好的帧率


非常感谢

我刚刚在JavaLand会议上谈到了这些问题。的确,对于具有基于路径的形状(如多段线和多边形)的常规动画,使用画布是当前最快的标准选项。这是由于JavaFX中的一个bug,它可以通过场景图使这样的动画变慢。我已经报告了这个问题,一个bug修复正在进行中


在本期《JIRA》中,我提到了硬件与软件渲染,但它也会影响场景图与画布渲染,因为画布似乎没有受到此缺陷的影响。

我刚刚在JavaLand会议上就这些问题进行了讨论。的确,对于具有基于路径的形状(如多段线和多边形)的常规动画,使用画布是当前最快的标准选项。这是由于JavaFX中的一个bug,它可以通过场景图使这样的动画变慢。我已经报告了这个问题,一个bug修复正在进行中


在这个JIRA问题中,我指的是硬件与软件渲染,但它也会影响场景图与画布渲染,因为画布似乎没有受到此错误的影响。

您能发布代码吗?我怀疑您在第一个示例中使用的是画布。您不能仅通过更改某些形状的x/y位置来移动JavaFX画布上的任何内容。我猜你是在说场景图。你能澄清一下吗?你能发布代码吗?我怀疑你在第一个例子中使用的是画布。您不能仅通过更改某些形状的x/y位置来移动JavaFX画布上的任何内容。我猜你是在说场景图。请澄清一下。请注意,错误报告下面的注释建议了一种可能的解决方法:将系统属性
prism.cacheshapes
设置为
false
。您可以使用VM参数
-Dprism.cacheshapes=false
从命令行执行此操作。如果要以编程方式执行此操作,显然必须在加载
应用程序
类之前执行此操作(我不知道为什么),这意味着您需要一个单独的主类,包含
System.setProperty(“prism.cacheshapes”,“false”)Application.launch(MyApplicationSubclass.class)。我怀疑这是一个好主意,除非你只做动画的形状。通常,缓存形状是有意义的。请注意,错误报告下面的注释建议了一种可能的解决方法:将系统属性
prism.cacheshapes
设置为
false
。您可以使用VM参数
-Dprism.cacheshapes=false
从命令行执行此操作。如果要以编程方式执行此操作,显然必须在加载
应用程序
类之前执行此操作(我不知道为什么),这意味着您需要一个单独的主类,包含
System.setProperty(“prism.cacheshapes”,“false”)Application.launch(MyApplicationSubclass.class)。我怀疑这是一个好主意,除非你只做动画的形状。通常,缓存形状是有意义的。