setOnMouseClicked事件没有调用我的开关案例

时间:2015-02-22 13:04:35

标签: java javafx switch-statement case

我正在开发JavaFX游戏,即Snake。我把我的大班分成了两个独立的 - 游戏在这个分离之前就已经完成了 - 现在我无法通过Class 2调用setOnMouseClicked事件来调用Class 1中的switch case.I' m使用了枚举类称为Direction作为我的案例。这就是我的MouseClicked事件在Class 2中的样子。

SnakeGame snakeGame = new SnakeGame();
MenuButton btnRestart = new MenuButton("RESTART");
btnRestart.setOnMouseClicked(event-> {

            FadeTransition ft = new FadeTransition(Duration.seconds(0.5), this);
            ft.setFromValue(1);
            ft.setToValue(0);
            ft.setOnFinished(evt-> setVisible(false));
            snakeGame.restartFromMenu();
            ft.play();

        } );

我想要它做什么;是单击一个按钮,然后重新启动游戏。我正在调用类1(snakeGame)中的方法,名为restartFromMenu。看起来像这样:

 public void restartFromMenu(){

    setDirection(Direction.CONTINUE);               
    getTimeline().play();
    System.out.println(getDirection());
    running = true;
}

这就是开关案例的外观:

    KeyFrame frame = new KeyFrame(Duration.seconds(0.2), event->{
        if(!running){
            return;}

         switch (getDirection()){

         case CONTINUE:
            System.out.println("Inside Case Continue");
            tail.setTranslateX(snake.lastIndexOf(tailX) + BLOCK_SIZE);
            tail.setTranslateY(snake.lastIndexOf(tailY));
            getTimeline().playFromStart();
            break;
            });

我设法在Class 1中使用另一个带有getCode()的switch case,如果我按下' P'然后它就可以从那里调用我的方法。像这样:

 scene.setOnKeyPressed(event ->{
        if(!moved){
            return;}
    switch(event.getCode()){
        case P:
                restartFromMenu();
                break;
                }
            moved = false;
                });

当我点击名为“重新启动”的菜单按钮时,菜单会消失,游戏将被冻结,直到我按下“P'”。由于它适用于调用我的方法,我不认为我的方法restartFromMenu是错误的。我如何制作它以便我可以从Class 2正确调用我的开关盒?

0 个答案:

没有答案