如何在javafx中的另一个场景

yukashima huksay

我正在写一个小游戏。我希望在游戏中间按esc时,可以显示模糊游戏菜单上的暂停菜单。我要做的是,创建一个新场景,其中包含一个stackPane,其中包含过去的根和暂停菜单的根,然后将过去的根的不透明度设置为0.4。

然后,当单击暂停菜单中的“恢复”按钮时,我将不透明度更改回1,并在舞台上设置过去的场景,但随后将其冻结。有人知道为什么吗?谁能帮助我实现这一目标?

这是我制作新场景的部分,然后将其放在舞台上:

        StackPane wrapper = new StackPane();
        previousScene = main.getPrimaryStage().getScene();
        previousScene.getRoot().setOpacity(.4);
        vBox.setId("pausedWrapper");
        wrapper.getChildren().add(previousScene.getRoot());
        wrapper.getChildren().add(vBox);
        scene = new Scene(wrapper, 1200, 700);
        return scene;

这是我将其更改回原来位置的部分:

        resumeGame.setOnAction(event -> {
            System.out.println("game resumed!");
            previousScene.getRoot().setOpacity(1);
            main.getPrimaryStage().setScene(previousScene);
        });

但是然后它不起作用,不透明度也不会恢复正常,奇怪的是,当我检查盒子上的声音时,播放了音乐,但是盒子没有像所有东西一样被检查,但是视图被冻结了。

詹姆斯_D

节点不能是两个不同场景图的一部分。这在代码的根部发生previousScene,因为它既是代码的一部分,previousScene又是您在第一个代码块中创建的新场景的一部分最有可能发生的事情是,当您将其添加到第二个场景时,它已从第一个场景中删除(尽管很难从您发布的代码中看出来)。

考虑改为使用aPopup来显示pauseMenu现有窗口的顶部,或者仅使用Stage具有undecorated的模式StageStyle,如以下SSCCE中所示:

import javafx.animation.Animation;
import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.effect.GaussianBlur;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Modality;
import javafx.stage.Popup;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.util.Duration;

public class PauseExample extends Application {

    @Override
    public void start(Stage primaryStage) {

        Rectangle rect = new Rectangle(50, 50, 50, 50);
        rect.setFill(Color.CORAL);

        TranslateTransition animation = createAnimation(rect);

        Button pauseButton = new Button("Pause");

        Pane pane = new Pane(rect);
        pane.setMinSize(600, 150);

        BorderPane root = new BorderPane(pane, null, null, pauseButton, new Label("This is\nthe main\nscene"));

        pauseButton.setOnAction(e -> {
            animation.pause();
            root.setEffect(new GaussianBlur());

            VBox pauseRoot = new VBox(5);
            pauseRoot.getChildren().add(new Label("Paused"));
            pauseRoot.setStyle("-fx-background-color: rgba(255, 255, 255, 0.8);");
            pauseRoot.setAlignment(Pos.CENTER);
            pauseRoot.setPadding(new Insets(20));

            Button resume = new Button("Resume");
            pauseRoot.getChildren().add(resume);

            Stage popupStage = new Stage(StageStyle.TRANSPARENT);
            popupStage.initOwner(primaryStage);
            popupStage.initModality(Modality.APPLICATION_MODAL);
            popupStage.setScene(new Scene(pauseRoot, Color.TRANSPARENT));


            resume.setOnAction(event -> {
                root.setEffect(null);
                animation.play();
                popupStage.hide();
            });

            popupStage.show();
        });

        BorderPane.setAlignment(pauseButton, Pos.CENTER);
        BorderPane.setMargin(pauseButton, new Insets(5));
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private TranslateTransition createAnimation(Rectangle rect) {
        TranslateTransition animation = new TranslateTransition(Duration.seconds(1), rect);
        animation.setByX(400);
        animation.setCycleCount(Animation.INDEFINITE);
        animation.setAutoReverse(true);
        animation.play();
        return animation;
    }

    public static void main(String[] args) {
        launch(args);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在JavaScript中检查一个DateTime是否晚于另一个

来自分类Dev

如何在JavaFX 2中打开另一个窗口?

来自分类Dev

在另一个场景中访问变量

来自分类Dev

如何在JavaFX 2中将ArrayList从一个场景传递到另一个场景?

来自分类Dev

如何在JavaFx中实现一个菜单栏支持多于一个场景

来自分类Dev

Swift:在另一个场景中更新了变量

来自分类Dev

JavaFX-从另一个.java文件导入场景

来自分类Dev

JavaFX-如何在另一个控制器中的一个控制器中使用方法?

来自分类Dev

如何将变量传递给另一个场景中的脚本

来自分类Dev

如何在另一个ViewController中关闭一个ViewController?

来自分类Dev

JavaFX-从另一个类事件打开场景

来自分类Dev

我试图用一个按钮转到另一个场景,但它给错误,JavaFX的

来自分类Dev

如何在Unity中更改皮肤角色并在另一个场景中获取角色

来自分类Dev

将场景中的布尔值保存到Unity中的另一个场景

来自分类Dev

在ReactJS中,如何在另一个组件中渲染一个组件?

来自分类Dev

如何使用Scenic将消息从一个场景发送到另一个场景?

来自分类Dev

如何在另一个JavaScript中访问一个JavaScript中的变量?

来自分类Dev

如何在JavaFX 2中将ArrayList从一个场景传递到另一个场景?

来自分类Dev

如何在Rails Capybara测试中先于另一个场景运行一个场景

来自分类Dev

如何在一个类中的另一个函数中更新变量?

来自分类Dev

如何从另一个场景调用函数?

来自分类Dev

如何在JavaScript中的另一个函数中调用一个函数

来自分类Dev

如何在javafx中的另一个场景

来自分类Dev

从 MainApp 如何在 JavaFX 中的另一个控制器中的 fx:id 中显示内容

来自分类Dev

JAVAFX:当另一个 MenuButton 中的选项更改时,如何在 MenuButton 中获取不同的 MenuItem

来自分类Dev

如何在javafx中进入另一个场景?

来自分类Dev

边框中心的场景切换形成javafx中的另一个类

来自分类Dev

如何在javafx中始终将窗口设置在另一个特定窗口的顶部

来自分类Dev

从另一个场景中的 TextField 输入后,Javafx 标签未更新

Related 相关文章

  1. 1

    如何在JavaScript中检查一个DateTime是否晚于另一个

  2. 2

    如何在JavaFX 2中打开另一个窗口?

  3. 3

    在另一个场景中访问变量

  4. 4

    如何在JavaFX 2中将ArrayList从一个场景传递到另一个场景?

  5. 5

    如何在JavaFx中实现一个菜单栏支持多于一个场景

  6. 6

    Swift:在另一个场景中更新了变量

  7. 7

    JavaFX-从另一个.java文件导入场景

  8. 8

    JavaFX-如何在另一个控制器中的一个控制器中使用方法?

  9. 9

    如何将变量传递给另一个场景中的脚本

  10. 10

    如何在另一个ViewController中关闭一个ViewController?

  11. 11

    JavaFX-从另一个类事件打开场景

  12. 12

    我试图用一个按钮转到另一个场景,但它给错误,JavaFX的

  13. 13

    如何在Unity中更改皮肤角色并在另一个场景中获取角色

  14. 14

    将场景中的布尔值保存到Unity中的另一个场景

  15. 15

    在ReactJS中,如何在另一个组件中渲染一个组件?

  16. 16

    如何使用Scenic将消息从一个场景发送到另一个场景?

  17. 17

    如何在另一个JavaScript中访问一个JavaScript中的变量?

  18. 18

    如何在JavaFX 2中将ArrayList从一个场景传递到另一个场景?

  19. 19

    如何在Rails Capybara测试中先于另一个场景运行一个场景

  20. 20

    如何在一个类中的另一个函数中更新变量?

  21. 21

    如何从另一个场景调用函数?

  22. 22

    如何在JavaScript中的另一个函数中调用一个函数

  23. 23

    如何在javafx中的另一个场景

  24. 24

    从 MainApp 如何在 JavaFX 中的另一个控制器中的 fx:id 中显示内容

  25. 25

    JAVAFX:当另一个 MenuButton 中的选项更改时,如何在 MenuButton 中获取不同的 MenuItem

  26. 26

    如何在javafx中进入另一个场景?

  27. 27

    边框中心的场景切换形成javafx中的另一个类

  28. 28

    如何在javafx中始终将窗口设置在另一个特定窗口的顶部

  29. 29

    从另一个场景中的 TextField 输入后,Javafx 标签未更新

热门标签

归档