Javafx 按下按钮时使用时间线显示动画。

Javafx 按下按钮时使用时间线显示动画。,javafx,sprite,timeline,Javafx,Sprite,Timeline,我正在制作一个小游戏,用户可以让一个角色在屏幕上走动,并让它执行攻击动作。创建动画的所有图像都保存在阵列中。对于我的游戏循环,我使用了一个AnimationTimer,只要用户能够控制角色和角色在屏幕上移动,一切都按照我希望的方式进行。然而,我遇到的问题是,当我想显示角色攻击时,AnimationTimer运行得很快,它在攻击图像数组中运行得很快,以至于你只能看到结束图像。所以我尝试设置它,当按下空格键进行攻击时,它将启动一个时间线,然后时间线将以较慢的速度通过攻击图像阵列。我希望时间线运行15

我正在制作一个小游戏,用户可以让一个角色在屏幕上走动,并让它执行攻击动作。创建动画的所有图像都保存在阵列中。对于我的游戏循环,我使用了一个AnimationTimer,只要用户能够控制角色和角色在屏幕上移动,一切都按照我希望的方式进行。然而,我遇到的问题是,当我想显示角色攻击时,AnimationTimer运行得很快,它在攻击图像数组中运行得很快,以至于你只能看到结束图像。所以我尝试设置它,当按下空格键进行攻击时,它将启动一个时间线,然后时间线将以较慢的速度通过攻击图像阵列。我希望时间线运行15次(攻击阵列的大小),显示攻击阵列中的所有图像,然后返回游戏。我不确定我是否正确使用了时间线,因为时间线似乎不是每次调用时都持续运行相同的次数。所以我的问题是,我如何才能解决我的问题,能够以较慢的速度显示和排列图像,但仍然能够使用我原来的游戏循环? 我所有的数组大小都相同,因此attackDown.length是所有数组的大小。每次按下空格键时,都会从主类调用My method attack()。这是由AnimationTimer控制的

  public void attack(GraphicsContext gc){
     Timeline timeline = new Timeline(new KeyFrame(
            Duration.millis(2500),
            e ->attackDisplay(gc)));
     timeline.setCycleCount(attackDown.length);
     timeline.play();
 }


 private void attackDisplay(GraphicsContext gc){
     System.out.println("in attack" + " a: " + a);
     if(a < (attackDown.length-1))
        a++;
     else
        a = 0;
     if(facing == 'D'){
        gc.fillRect(0,0,WIDTH,HEIGHT);
        gc.drawImage(attackDown[a],xLoc,yLoc);
     }else if(facing == 'U'){
        gc.fillRect(0,0,WIDTH,HEIGHT);
        gc.drawImage(attackUp[a],xLoc,yLoc);
     }else if(facing == 'L'){
        gc.fillRect(0,0,WIDTH,HEIGHT);
        gc.drawImage(attackLeft[a],xLoc,yLoc);
     }else if(facing == 'R'){
        gc.fillRect(0,0,WIDTH,HEIGHT);
        gc.drawImage(attackRight[a],xLoc,yLoc);
     }
 } 
公共无效攻击(GraphicsContext gc){
时间轴=新时间轴(新关键帧(
持续时间。毫秒(2500),
e->attackDisplay(gc));
timeline.setCycleCount(attackDown.length);
timeline.play();
}
私有无效攻击显示(GraphicsContext gc){
System.out.println(“攻击中”+“a:”+a);
如果(a<(攻击长度-1))
a++;
其他的
a=0;
如果(面向='D'){
gc.fillRect(0,0,宽度,高度);
gc.drawImage(攻击[a]、xLoc、yLoc);
}else if(朝向=='U'){
gc.fillRect(0,0,宽度,高度);
gc.drawImage(attackUp[a],xLoc,yLoc);
}else if(朝向=='L'){
gc.fillRect(0,0,宽度,高度);
gc.drawImage(attackLeft[a],xLoc,yLoc);
}else if(面向=='R'){
gc.fillRect(0,0,宽度,高度);
gc.drawImage(attackRight[a],xLoc,yLoc);
}
} 

Hm问得好,我来看看。