如何在动画结束时返回值

时间:2015-11-29 21:56:13

标签: java javafx

我想要实现的是在动画结束后返回一个整数值。

我有这段代码:

public void spin(){
    symbol = queue.poll();
    this.setImage(symbol);
    queue.add(symbol);
}

private int randomize(int min, int max){
    long seed = System.nanoTime();
    Random rand = new Random(seed);
    return  rand.nextInt((max - min) + 1) + min;
}

public int getKey() {
    return this.queue.peek().getKey();
}

public int play() {
    KeyFrame kf = new KeyFrame(Duration.millis(20), e -> spin());
    Timeline tl = new Timeline(kf);
    tl.setCycleCount(randomize(10,50));
    tl.play();
    tl.setOnFinished(e -> { // Incompatible types: unexpected return value
        return this.queue.peek().getKey(); // Incompatible types: bad return type in lambda expression
    });
    return e;
}

我正在研究老虎机游戏,以提高我的java编程技巧。我有一个Symbol类,它有两个属性(符号的ImageView和一个整数键)。然后我有一个包含符号对象队列的Reel类。 (上面的代码来自我的Reel类)。单击将调用play方法,该方法依次触发一个动画,该动画调用spin()方法生成的次数。 spin方法基本上从队列中轮询符号,然后再将其添加到队列中。 (这会一直旋转哪个符号位于队列的头部)。然后简单地使用getKey()方法返回一个整数值(符号​​对象的key属性,当前是队列的头部)。我希望能够在动画结束时从play()方法返回后者。但是我在setOnFinished周围有语法错误:“不兼容的类型:意外的返回值”。有人可以帮助我理解我的代码有什么问题以及我应该如何解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:0)

这根本不是动画API的设计方式:它遵循事件驱动模型。 Timeline.play()方法立即退出(即在动画完成之前),因此在动画完成之前很久就会执行到方法的结尾。显然,此时onFinished处理程序没有可用的值。

相反,您应该将onFinished处理程序视为提供动画完成时要执行的代码。所以你应该这样做:

public void play() {
    KeyFrame kf = new KeyFrame(Duration.millis(20), e -> spin());
    Timeline tl = new Timeline(kf);
    tl.setCycleCount(randomize(10,50));
    tl.play();
    tl.setOnFinished(e -> { 
        int x = this.queue.peek().getKey(); 
        // do whatever you need to do with x here....
    });
}