如何更改关键帧持续时间

时间:2018-12-06 20:56:50

标签: java

我有一组移动的形状,它们的大小会增加,当形状达到一定大小时,我希望它的移动速度(秒)增加,但是我不知道如何更新KeyFrame的seconds变量。 seconds变量是一个全局变量,我最初在start方法中将其设置为0.2。我将组的长度存储在ArrayList中,所以我会做类似

的操作
if(groupList.size() >= 3 && groupList.size() <= 8){
      seconds = 0.15;
}
if(groupList.size() >= 9 && groupList.size() <= 14){
      seconds = 0.09;
}

等上面的代码在我的start方法中。我在名为move的方法中安装了KeyFrame:

public void move(){
Timeline timeline = new Timeline();
KeyFrame frame = new KeyFrame(Duration.seconds(seconds), e -> {
            //bunch of if statements for game logic
    });
    timeline.setCycleCount(Timeline.INDEFINITE);
    timeline.getKeyFrames().add(keyFrame);
    timeline.play();}

所以在我的启动方法中,我按以下顺序进行操作:

gameStart();
move();
if(groupList.size() >= 3 && groupList.size() <= 8){
      seconds = 0.15;
      move();
}
if(groupList.size() >= 9 && groupList.size() <= 14){
      seconds = 0.09;
      move();
}

1 个答案:

答案 0 :(得分:0)

在if语句中,我在move方法调用之前以及更改seconds变量之后添加了timeline.stop()和timeline.getKeyFrames()。clear()!向@MadProgrammer大喊解决方案!

if(groupList.size() >= 3 && groupList.size() <= 8){
  seconds = 0.15;
  timeline.stop();
  timeline.getKeyFrames().clear();
  move();
}
if(groupList.size() >= 9 && groupList.size() <= 14){
  seconds = 0.09;
  timeline.stop();
  timeline.getKeyFrames().clear();
  move();
}