我有一个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创建是无用的。 我必须想到另一种方法来一个接一个地播放我的动画。