Javafx 范围内无法访问AnimationTimer类型的封闭实例
我正在使用JavaFX创建我自己的乒乓球游戏版本。在显示最终分数后,单击给定的按钮返回主菜单,我尝试启动我的AnimationTimer或循环。然而,我得到了这个错误,“在范围内不能访问AnimationTimer类型的封闭实例”。如何在按钮的.setOnAction内重新启动AnimationTimer 这是我的AnimationTimer的代码Javafx 范围内无法访问AnimationTimer类型的封闭实例,javafx,Javafx,我正在使用JavaFX创建我自己的乒乓球游戏版本。在显示最终分数后,单击给定的按钮返回主菜单,我尝试启动我的AnimationTimer或循环。然而,我得到了这个错误,“在范围内不能访问AnimationTimer类型的封闭实例”。如何在按钮的.setOnAction内重新启动AnimationTimer 这是我的AnimationTimer的代码 new AnimationTimer() { public void handle(long now) {
new AnimationTimer() {
public void handle(long now) {
if(playing) {
x += dx;
y += dy;
if ( x < 0 || x+ball.getWidth() > scene.getWidth() )
dx = -dx;
if (y < 0 )
dy = -dy;
if(y > scene.getHeight() && lives > 0) {
x = 400;
y = 400;
dx = 5;
dy = -5;
lives-=5;
life.setText("Lives: " + lives);
}
if(left && pX > 5) {
pX -= speed;
} else if(right && pX+paddle.getWidth() < scene.getWidth() - 5) {
pX += speed;
}
if (x > pX-40 && x < pX + paddle.getWidth() && y == pY-paddle.getHeight()-15) {
dy = -dy;
score+=1;
scores.setText("Score: " + score);
}
life.relocate(10, 10);
ball.relocate(x, y);
paddle.relocate(pX, pY);
}
if(lives == 0) {
playing = false;
gameover = true;
this.stop();
root.getChildren().removeAll(paddle, ball, scores, life);
finalScore.setText("" + score);
root.getChildren().add(finalScore);
root.getChildren().add(returnToMain);
returnToMain.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
playing = false;
gameover = false;
root.getChildren().addAll(start, pong);
root.getChildren().removeAll(finalScore, returnToMain);
AnimationTimer.this.start();
}
});
}
}
}.start();
newanimationtimer(){
公共无效句柄(长){
如果(玩){
x+=dx;
y+=dy;
如果(x<0 | | x+ball.getWidth()>scene.getWidth())
dx=-dx;
if(y<0)
dy=-dy;
如果(y>scene.getHeight()&&lives>0){
x=400;
y=400;
dx=5;
dy=-5;
寿命-=5;
life.setText(“lifes:+lifes”);
}
如果(左&pX>5){
pX-=速度;
}else if(right&&pX+pable.getWidth()pX-40&&x
这似乎是为returnToMain
定义事件处理程序的错误位置,但您不能将AnimationTimer.this.start()
替换为start()
?是的,这很有效,但是当我这样做时,我似乎再也不能删除finalScore,returnToMainI不知道您的意思“return to main”实际上,我想我真的不知道你所说的“不再”是什么意思。以前的版本实际上没有编译,所以你甚至无法运行它。所以它以前肯定没有做任何其他事情。我想这听起来好像你有一个完全不同的问题,只有在你修复第一个问题时才变得明显。