我正在制作一个小游戏,用户可以让角色在屏幕上走动并使其预先形成攻击动作 . 用于创建动画的所有图像都保存在数组中 . 对于我的游戏循环,我使用的是AnimationTimer,一切都按照我想要的方式工作,只要用户能够控制角色和角色在屏幕上移动 . 但是,我遇到的问题是当我想要显示角色攻击时,AnimationTimer会快速运行,并且它会快速地穿过攻击图像阵列,以至于你能看到的只是结束图像 . 因此我尝试将其设置为当空格键被按下以进行攻击时,它将启动时间轴,然后时间轴将以较慢的速率通过攻击图像阵列 . 我希望时间轴运行15次(攻击阵列的大小),显示攻击阵列中的所有图像,然后返回游戏 . 我不确定我是否正确使用时间轴,因为似乎时间轴在每次调用时都不会始终运行相同的次数 . 所以我的问题是我如何才能解决我能够以较慢的速度显示和数组图像但仍然能够使用我原来的游戏循环的问题?我的所有数组大小都相同,因此attackDown.length是所有数组的大小 . 每次按下空格键时,我的方法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);
     }
 }