【发布时间】:2019-07-24 19:27:08
【问题描述】:
我正在尝试通过列表播放搜索,如果该列表包含key 字,它将播放该动画。
如果 myList 包含{"Cloudy","Cloudy,"Cloudy","Clear"}
它应该播放 cloudyT 动画并循环 3 次然后 clearT 动画。但
那不是演员表。我注意到它同时执行所有 4 个动画,导致只显示一个动画。我的 setCycleCount 对所有这些都是相同的。
我还注意到 print 语句会在动画完成之前一次性打印所有内容,这意味着它不会等待动画完成。
for (int i = 0; i < time.length;i++) {
if (myList.get(i).equals("Cloudy")) {
System.out.println("Cloudy found");
cloudyGrp.setVisible(true); //Group
cloudyT.setRate(.5); //Timeline
cloudyT.play();
cloudyT.setOnFinished(event -> {
cloudyGrp.setVisible(false);
System.out.println("Cloudy animation done");
});
}
if (myList.get(i).equals("Clear")) {
clearGrp.setVisible(true); //Group
clearT.setRate(.5);
clearT.play(); //Timeline
clearT.setOnFinished(event -> {
clearGrp.setVisible(false);
System.out.println("Clear animation done");
});
}
//other if statement with same layout
如何将它们分开,以便它们一个接一个地单独播放?
我想过使用Threads 并使用优先级,但不知道如何实现它。谢谢。
【问题讨论】:
-
我想你在找
else if。 -
@VinceEmigh 可悲的是
else if仍然给出同样的错误 -
我的错,我看错了代码。看来您需要使用回调系统
setOnFinished,因为循环的迭代速度比动画播放的速度要快。而不是循环,也许你可以递归地处理这个。我会在大约 10 分钟后检查一下,正要回家。 -
如果我的答案看起来太复杂,请告诉我,我会简化的。
-
@VinceEmigh 谢谢你这么详细的解释,我会在课后几个小时试试