【问题标题】:Why OnFinished Eventhandler is invoking continuously?为什么 OnFinished Eventhandler 不断调用?
【发布时间】:2015-10-14 20:11:28
【问题描述】:

我是 JavaFX 新手,对此代码有疑问

  pongAnimation = new Timeline(
    new KeyFrame(new Duration(1.0), t -> {
         checkForCollision();
      })
  );
  pongAnimation.setCycleCount(Timeline.INDEFINITE);

为什么要使用事件处理程序

 t -> { checkForCollision(); }

在动画结束后开始?

我们没有代码

   pongAnimation.setOnFinished( t -> {
         checkForCollision();)

在我的工作簿中,它说

当 KeyFrame 具有动作事件处理程序时,其中的代码 处理程序——在这种情况下又是一个 lambda 表达式——是 当达到该关键帧的时间时执行。

我的问题是,当 KeyFrame 有一个 action 事件处理程序时,为什么它会再次启动事件?

【问题讨论】:

  • 你说的是哪个动画?你能添加一个MCVE 来复制你的问题吗?
  • 使用此代码,checkForCollision() 方法将每毫秒调用一次。
  • 实际上,checkForCollision() 将在一个脉冲中调用一次,因为时间线是关闭 JavaFX 的动画子系统的,它不会比一个脉冲更频繁地触发一次。通常一个脉冲每秒会出现 60 次。
  • 我的问题是,为什么 checkForCollision() 会每毫秒调用一次。我们没有类似 xyz.setonfinished(..);
  • @jewelsea 是的,很好。

标签: animation javafx javafx-8


【解决方案1】:

为什么在动画结束后事件处理程序会启动?

因为您将动画设置为无限重复

pongAnimation.setCycleCount(Timeline.INDEFINITE);

如果你想让它只播放一次

pongAnimation.setCycleCount(1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 2017-11-17
    • 2022-10-18
    • 2011-04-22
    • 2014-04-03
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    相关资源
    最近更新 更多