BooleanBinding和TimeLine

时间:2017-05-08 22:46:58

标签: java javafx

我有一个BooleanBinding,如下所示:

    public void initQueue(ObservableList<Player> players) {
        queueIsFree = new BooleanBinding() {
            {
            players.forEach(
                player -> bind(player.getRobot().animatingProperty));
            }

            @Override
            protected boolean computeValue() {
            Boolean bool = true;
            for (Player p : players) {
                if (p.getRobot().animatingProperty.get() == true) {
                bool = false;
                break;
                }
            }
            return bool;
            }

        };

   }

当机器人的所有动画属性都是假的时候,它应该是真的。只要其中一个更改,就会调用此changeListener:

change = new ChangeListener<Boolean>() {

    @Override
    public void changed(ObservableValue<? extends Boolean> arg0,
        Boolean oldValue, Boolean newValue) {
        if (newValue.equals(true)) {
          if (list.size() > 0) {
        // plays the next animation, which, when finished, sets the animatingProperty back to false
                nextAnimation();
            } else {
                stopQueue();
            }
        }

       }

};

问题:valueChangedEvent频繁触发,我得到一个stackOverFlowError。

为了动画,我使用TimeLine和AnimationTimer,我想这是问题,但我不知道如何解决它。

编辑:我现在知道,问题是,TimeLines是异步的,意思是,它们开始然后执行下一行代码,这意味着,booleanBinding,即i& #39; ve创建是无用的。 我必须想到另一种方法来一个接一个地播放我的动画。

0 个答案:

没有答案