javafx 使用

回想一下,给AnimationTimer起个名字可能不是一个好主意,因为它不仅可以用于动画,还可以用于测量fps速率,碰撞检测,模拟步骤,游戏主循环等。实际上,我大部分时间都在看AnimationTimer的运行与动画完全无关。 不过,在某些情况下,您可能要考虑为动画使用AnimationTimer。 这篇文章将解释该类,并显示一个示例,其中将AnimationTimer用于计算动画。
AnimationTimer提供了一个非常简单但非常有用且灵活的功能。 它允许指定一个方法,该方法将在每一帧中调用。 此方法的用途不受限制,并且如前所述,与动画没有任何关系。 唯一的要求是它必须快速返回,因为否则它很容易成为系统的瓶颈。
要使用它,开发人员必须扩展AnimationTimer并实现抽象方法handle()。 当AnimationTimer处于活动状态时,将在每一帧中调用此方法。 单个参数传递给handle()。 它包含当前时间(以纳秒为单位),与调用System.nanoTime()时的时间相同。
为什么要使用传入的值而不是自己调用System.nanoTime()或它的弟弟System.currentTimeMillis()? 有几个原因,但最重要的可能是,它使调试时的生活变得更加轻松。 如果您曾经尝试调试依赖于这两种方法的代码,那么您就知道自己已经基本陷入困境。 但是,JavaFX运行时在调试期间等待执行下一步时进入暂停状态,并且在此暂停期间内部时钟不会继续运行。 换句话说,无论您在调试时恢复暂停的程序之前等待两秒钟还是两个小时,参数的增量都将大致相同!
AnimationTimer有两个方法start()和stop()来激活和停用它。 如果覆盖它们,则在超类中调用这些方法很重要。
Animation API带有许多功能丰富的类,这些类使定义动画非常简单。 有预定义的过渡类,可以使用时间轴定义基于关键帧的动画,甚至可以轻松编写自定义过渡。 但是在什么情况下使用AnimationTimer有意义? –几乎总是要使用标准类之一。 但是,如果要指定许多简单的动画,则最好使用AnimationTimer。
标准动画类的功能丰富性是有代价的。 每个动画都需要跟踪一大堆变量,而对于简单的动画,这些变量通常是不需要的。 另外,这些类针对速度进行了优化,而不是针对较小的内存占用。 有些变量存储两次,一次以公共API要求的格式存储,一次以有助于在播放时更快地计算的格式存储。
以下是显示星空的简单示例。 它为成千上万个从中心飞到外部边缘的矩形设置了动画。 使用AnimationTimer仅允许存储所需的值。 例如,与时间轴内的计算相比,该计算极其简单,因为无需考虑高级功能(循环,动画速率,方向等)。
package fxsandbox;import java.util.Random;
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;public class FXSandbox extends Application {private static final int STAR_COUNT = 20000;private final Rectangle[] nodes = new Rectangle[STAR_COUNT];private final double[] angles = new double[STAR_COUNT];private final long[] start = new long[STAR_COUNT];private final Random random = new Random();@Overridepublic void start(final Stage primaryStage) {for (int i=0; i<STAR_COUNT; i++) {nodes[i] = new Rectangle(1, 1, Color.WHITE);angles[i] = 2.0 * Math.PI * random.nextDouble();start[i] = random.nextInt(2000000000);}final Scene scene = new Scene(new Group(nodes), 800, 600, Color.BLACK);primaryStage.setScene(scene);primaryStage.show();new AnimationTimer() {@Overridepublic void handle(long now) {final double width = 0.5 * primaryStage.getWidth();final double height = 0.5 * primaryStage.getHeight();final double radius = Math.sqrt(2) * Math.max(width, height);for (int i=0; i<STAR_COUNT; i++) {final Node node = nodes[i];final double angle = angles[i];final long t = (now - start[i]) % 2000000000;final double d = t * radius / 2000000000.0;node.setTranslateX(Math.cos(angle) * d + width);node.setTranslateY(Math.sin(angle) * d + height);}}}.start();}public static void main(String[] args) {launch(args);}}

参考:在Mike's Blog博客上使用 JCG合作伙伴 Michael Heinrichs 的JavaFX AnimationTimer 。

翻译自: https://www.javacodegeeks.com/2012/06/using-javafx-animationtimer.html

javafx 使用

javafx 使用_使用JavaFX AnimationTimer相关推荐

  1. javafx 教程_集成JavaFX和Swing

    javafx 教程 我刚刚完成了对使用Swing的应用程序组件的重写,现在使用的是JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我一段时间 ...

  2. javafx 教程_集成JavaFX和Swing(修订版)

    javafx 教程 我刚刚完成了对使用Swing的应用程序组件的重写,现在使用的是JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我一段时间 ...

  3. javafx性能_对JavaFX Mobile应用程序进行性能分析

    javafx性能 注意:本文最初发表于2009年,仅供参考. 请查阅我们其余的JavaFX文章 . 对于每个JavaFX Mobile应用程序开发人员而言,今天都是美好的一天. 你想知道为什么吗? 因 ...

  4. javafx项目_为什么选择javafx?

    之前我发了一篇文章讲述跨平台的GUI技术,其中提到了javafx.对此很多人表示疑惑,认为javafx是落伍的开发技术.对此,我想专门写一篇文章来做个介绍. 其实很多人并没有听说过javafx.现在最 ...

  5. javafx 教程_用JavaFX编写图块引擎

    javafx 教程 随着JavaFX嵌入式版本的问世,我们的框架对于游戏开发变得越来越有趣,因为我们现在可以瞄准平板电脑和智能手机等小型消费类设备. 因此,我决定对JavaFX进行更多的游戏编写实验. ...

  6. JavaFX动画:有趣的AnimationTimer

    AnimationTimer JavaFX有三类动画实现方式:Transition,TimeLine和AnimationTimer. AnimationTimer看起来像是一个计时器,其实他更适合叫做 ...

  7. javafx 示例_示例介绍:JavaFX 8打印

    javafx 示例 我有一段时间没有写博客了,我想与其他人分享有关JavaFX的所有信息(我的日常工作和家庭可能是借口). 对于那些对此博客不熟悉的人 ,我是JavaFX 2 Introduction ...

  8. 基于javafx的五子棋_基于JavaFX的SimpleDateFormat演示程序

    基于javafx的五子棋 对于使用Java Date进行格式化的新手,甚至对于使用Java Date进行格式化的新手,对于有经验的Java开发人员来说,可能都会有些棘手,其中之一就是使用SimpleD ...

  9. javafx项目_爬虫系列(5):JavaFx界面

    接上一节(爬虫系列(4):存储数据-MySQL). 先上图 幻猿·简易爬虫主界面 关于JavaFx JavaFx是在2007年5月的JavaOne大会上公之于众的,而第一个正式版本v1.0是在2008 ...

最新文章

  1. Python使用matplotlib可视化发散型条形图、发散条形图(Diverging Bars)是一种可以同时处理负值和正值的条形图、并按照大小排序区分数据(Diverging Bars)
  2. 超声波测距测速升压可调中周倒车雷达变频器传感器1:10
  3. DOJO试用手记3--异步通信【原创】
  4. Delphi的类与继承
  5. html文本超出自动换行、显示省略号
  6. 多线程—并发容器与机制
  7. Java Collections API怪癖
  8. Spring Boot 企业实战_前夕
  9. 如何抓获JVM crash的幕后黑手
  10. 美团王兴:互联网下半场基本功不过关 活下去都很难
  11. 6410 spi 设备驱动
  12. 如何正确认识大数据技术
  13. AcWing 898. 数字三角形(线性DP)
  14. 科技圈晒开工福利!小米最直接,腾讯最传统,阿里最豪气,你们家的呢?
  15. 在VMware环境下U盘的挂载与共享
  16. ASP.NET在Web窗体上输出九九乘法表
  17. 你肯定用过手机护眼模式, 但你知道怎么将电脑Win10窗口背景色修改为护眼的淡绿色吗?(附带如何备份注册表)
  18. GBase 8s 入门
  19. FI--SAP财务系统总账应用技巧
  20. html转换pdf java_java转pdf(html转为pdf)

热门文章

  1. Class的 getSuperclass与getGenericSuperclass区别
  2. 指定查找区间,查找学生姓名并显示是否修改成功
  3. mysql为数据库表起别名的注意事项
  4. 在idea 中添加和删除模块Module
  5. 计算机三级网络技术题库第15套,第15套 上机操作题
  6. c# 向mysql插入数据_C#连接mysql数据库 及向表中插入数据的方法
  7. Multi-catch parameters are not allowed for source level below 1.7 解决方法
  8. 分类算法中常用的评价指标
  9. line和spline_探索适用于Apache Spark的Spline Data Tracker和可视化工具(第1部分)
  10. 笔试知识点 网络安全_安全点