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