GVKun编程网logo

JavaFX多场景开启,场景复制(javafx场景切换)

15

此处将为大家介绍关于JavaFX多场景开启,场景复制的详细内容,并且为您解答有关javafx场景切换的相关问题,此外,我们还将为您介绍关于Cocos2d-x多场景切换生命周期、Godot4.0将支持多

此处将为大家介绍关于JavaFX多场景开启,场景复制的详细内容,并且为您解答有关javafx场景切换的相关问题,此外,我们还将为您介绍关于Cocos2d-x多场景切换生命周期、Godot 4.0 将支持多人游戏场景复制、Java CPU 100% 场景复现与分析、Java vs JavaFX Script vs FXML.哪种更好的JavaFX编程方式?的有用信息。

本文目录一览:

JavaFX多场景开启,场景复制(javafx场景切换)

JavaFX多场景开启,场景复制(javafx场景切换)

如何解决JavaFX多场景开启,场景复制?

我想要一个登录页面(我有工作),然后进入一个新场景(我还没有工作)。

然后我希望这个场景有你可以点击的项目。每个项目打开另一个场景/窗口。但是您可以根据需要打开任意数量。它们包含不同的数据,但相同的 fxml/scene。

这可能吗?

enter image description here

解决方法

是的,这是可能的。它需要您为场景创建一个控制器,然后为该场景的每个新实例创建该控制器对象的新实例。我认为它也需要每次都通过一个新阶段。

编辑: 未能为场景的每个新实例创建新的控制器实例意味着有可能从另一个窗口中的打开场景覆盖一个窗口中打开场景中的数据窗口。

如果您不熟悉 JavaFX,我将提供一些创建新视图的示例。这个问题主要是关于这样做的方法。

假设您遵循 MVC 模式,您的项目的结构可能类似于:

编辑:更正了 FXMLLoader 的不当使用

MainApp.java

import java.io.IOException;

import javafx.application.Application;

import javafx.fxml.FXMLLoader;

import javafx.stage.Modality;
import javafx.stage.Stage;

import Controller.LoginController;

public class Main
        extends Application
{

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

    @Override
    public void start(Stage stage) throws Exception
    {
        try {

            FXMLLoader loader = new FXMLLoader(Main.class.getResource("/View/Login.fxml"));
            Parent     root   = loader.load();

            stage.setScene(new Scene(root));

            LoginController loginController = loader.getController();

            // Pass this stage by calling the controller''s stage setter.
            // Conversely we could call a singleton class here to
            // give us a stage object that we can re-use many times 
            loginController.setStage(stage);

            stage.initStyle(StageStyle.UNIFIED);

            stage.setResizable(false);
            stage.getIcons().add(new Image("Resources/icon.png"));
            stage.setTitle("");

            stage.centerOnScreen();
            stage.show();

        } catch (IOException ex) {
            // exception handling
        }
    }
}

登录控制器.java

import java.net.URL;

import java.io.IOException;

import java.util.ResourceBundle;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;

import javafx.event.EventHandler;

import javafx.scene.control.Button;

import javafx.stage.Modality;
import javafx.stage.Stage;

import Controller.MainController;

public class LoginController implements Initializable
{
    @FXML
    private Button loginButton;
    private Stage stage;

    public LoginController() {}

    @Override
    public void initialize(URL url,ResourceBundle rb) {
    
        loginButton.addEventHandler(MouseEvent.MOUSE_CLICKED,(e) -> {
            doLogin();
        });
    }

    @FXML
    private void doLogin() {
    
        // handle login
        
        showMainApplicationView();
    
    }

    @FXML
    private void showMainApplicationView() {
        
        try {

        loader = new FXMLLoader(LoginController.class.getResource("View/mainView.fxml"));

        Parent         root           = (Parent) loader.load();
        MainController mainController = new MainController();

        loader.setController(mainController);

        mainController.setStage(new Stage());

        stage.initModality(m);
        stage.setResizable(isResizable);
        stage.getIcons().add(new Image("Resources/icon.png"));
        stage.setTitle(title);
        stage.setScene(new Scene(root));

        return stage;
        } catch (IOException e) {

            // exception handling

        }
    }

    @FXML
    public void setStage(Stage stage) {
    
        this.stage = stage;

    }

}

MainController.java

import java.net.URL;

import java.util.ResourceBundle;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;

import javafx.stage.Stage;

public class LoginController implements Initializable
{

    public LoginController() {}

    @Override
    public void initialize(URL url,ResourceBundle rb) {}


    @FXML
    private void showSubview() {
        /* Same code as the prior examples for launching a new view
         * It will work for creating as many new "windows" of the same
         * view as you desire. If you need to pass different types of
         * data to each view you can use a DAO model,or some kind of
         * "Instance" object that works for sending/receiving data to/from
         * the subview from this class.
         */

    }

    @FXML
    public void setStage(Stage stage) {
    
        this.stage = stage;

    }

}

如果您想多次重复使用一个舞台并以不同的深度进入子视图,我建议使用 Singleton 类。

StageHolder.java

import javafx.stage.Stage;

public final StageHolder
{
    private Stage stage;
    
    private final static StageHolder INSTANCE = new StageHolder();

    private StageHolder() {}

    public static StageHolder getInstance() {

        return INSTANCE;
    }

    public Stage getStage() {

        return this.stage;
    }

    // you can omit this setter if you only want to re-use a single stage over and over.
    public void setStage(Stage stage) {

        this.stage = stage;

    }
}

Cocos2d-x多场景切换生命周期

Cocos2d-x多场景切换生命周期

在多个场景切换时候,场景的生命周期会更加复杂。这一节我们介绍一下场景切换生命周期。

多个场景切换时候分为几种情况:

情况1,使用pushScene函数从实现HelloWorld场景进入Setting场景。

情况2,使用replaceScene函数实现从HelloWorld场景进入Setting场景。

情况3,使用popScene函数从实现Setting场景回到HelloWorld场景。

我们参考HelloWorld重写Setting层的中几个生命周期函数,代码如下:

@H_757_301@



情况1时候,它的调用顺序如下图所示。

情况2时候,它的调用顺序如下图所示,从图中可见与上面不同是多出HelloWorld中cleanup函数,这也说明replaceScene函数会释放场景对象。

情况3时候,它的调用顺序如下图所示,从图中可见popScene函数时候调用Setting中cleanup函数,这说明popScene函数会释放Setting场景对象,当回到HelloWorld场景时候并不会调用init()函数,而是调用onEnter函数。

总结

以上是小编为你收集整理的Cocos2d-x多场景切换生命周期全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

Cocos2d-x相关文章

如何使用CCRenderTexture创建动态纹理 Cocos2d-x 2 1 4
    本文实践自 RayWenderlich、Ali Hafizji 的文章《How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建实时纹理、如何用Gimp创建无缝拼接纹
Cocos-code-ide使用入门学习
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@163.com微信公众号:HopToad 欢迎转载,转载标注出处:http://blog.csdn.netotbaron/article/details/424343991.  软件准备 下载地址:http://cn.cocos2d-x.org/download 2.  简介2.1         引用C
Cocos2D-x-3.0 编译(Win7)
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从Cocos2D-x官网上下载,进入网页http://www.cocos2d-x.org/download,点击Cocos2d-x以下的Download  v3.0,保存到自定义的文件夹2:从python官网上下载。进入网页https://www.python.org/downloads/,我当前下载的是3.4.0(当前最新
Cocos2d-x 2 0 在Windows平台下的使用
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发引擎,易学易用,支持多种智能移动平台。官网地址:http://cocos2d-x.org/当前版本:2.0    有很多的学习资料,在这里我只做为自己的笔记记录下来,错误之处还请指出。在VisualStudio2008平台的编译:1.下载当前稳
quick-cocos2d-x实例之挑战记忆极限设计文档
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《最强大脑》娱乐节目。将2048改造成一款挑战玩家对数字记忆的小游戏。邮箱:appdevzw@163.com微信公众号:HopToadAPK下载地址:http://download.csdn.net/detailotbaron/8446223源码下载地址:http://download.csdn.net/
Cocos2d-x 3 X CMake MinGW版本编译运行
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试以QtCreatorIDE来进行CMake构建。Cocos2d-x3.X地址:https://github.com/cocos2d/cocos2d-x1.打开QtCreator,菜单栏→"打开文件或项目...",打开cocos2d-x目录下的CMakeLists.txt文件;2.弹出CMake向导,如下图所示:设置
vs 2013 编译cocos2d-x-3.9
 下载地址:链接:https://pan.baidu.com/s/1IkQsMU6NoERAAQLcCUMcXQ提取码:p1pb下载完成后,解压进入build目录使用vs2013打开工程设置平台工具集,打开设置界面设置: 点击开始编译等待编译结束编译成功在build文件下会出现一个新文件夹Debug.win32,里面就是编译
cocos2d-x游戏开发系列教程-超级玛丽01-前言
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net前言上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实
  • • 如何使用CCRenderTexture创建动态纹理
  • • Cocos-code-ide使用入门学习
  • • Cocos2D-x-3.0 编译(Win7)
  • • Cocos2d-x 2 0 在Windows平台下的使用
  • • quick-cocos2d-x实例之挑战记忆极限设计
  • • Cocos2d-x 3 X CMake MinGW版本编译运行
  • • vs 2013 编译cocos2d-x-3.9
  • • cocos2d-x游戏开发系列教程-超级玛丽01
  • • Cocos2d-x CCControlPotentiometer之圆
  • • Cocos2d-x入门教程(二)简单的静态显示
Flutterandroidiosswift抖音cocos2d小米cocos2dx三国杀kotlin-coroppococosandroid-jexcodeandroid-liaugmented-美好mutateandroid-gr加到arkitreact-naticnnandroid-cocrashlytic耳机java-nativexoplayerstockandroid-ar壁纸react-natiandroid-daandroid-wowatchosandroid-ca笔记本电脑buildozer装备android-al
  • 友情链接:
  • 菜鸟教程
  • 前端之家
  • 编程小课
  • 小编
  • -
  • 我要投稿
  • -
  • 广告合作
  • -
  • 联系我们
  • -
  • 免责声明
  • -
  • 网站地图
版权所有 © 2018 小编 闽ICP备13020303号-8
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜"程序精选"关注
微信扫一扫可直接关注哦!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
bool Setting::init()
{
if ( !Layer::init() )
{
returnfalse;
}
log ( "Settinginit" );
......
returntrue;
}
void Setting::onEnter()
{
Layer::onEnter();
"SettingonEnter" );
}
Setting::onEnterTransitionDidFinish()
{
Layer::onEnterTransitionDidFinish();
"SettingonEnterTransitionDidFinish" );
}
Setting::onExit()
{
Layer::onExit();
"SettingonExit" );
}
Setting::onExitTransitionDidStart()
{
Layer::onExitTransitionDidStart();
"SettingonExitTransitionDidStart" );
}
Setting::cleanup()
{
Layer::cleanup();
"Settingcleanup" );
}

Godot 4.0 将支持多人游戏场景复制

Godot 4.0 将支持多人游戏场景复制

除了 Vulkan 支持和大量图形渲染器工作之外,Godot 4.0 还改进了其多人游戏开发功能。

多人游戏一直是一中复杂的功能,需要临时优化和特定于游戏的解决方案,并主要包含两个概念:某种形式的消息传递和某种形式的状态复制(同步和协调)。虽然 Godot 此前提供了一个消息传递系统(即 RPC),但它没有提供一个通用的复制系统。而 Godot 4.0 将提供一个开箱即用地解决方案,并可以扩展到不同地游戏中。

此外,Godot 4.0 也注意到跨机器传输数据中的的安全问题,比如默认不允许解码对象,因为它们可以随身携带脚本或强制接收端在初始化期间执行特定代码。这是一个安全漏洞,此类任意代码执行将允许服务器访问或操作游戏进程有权访问的客户端文件系统上的任何文件。并且,复制 API 将支持开发者指定远程对端可以生成哪些场景。最终实现还将允许对可以在每个特定路径上生成的节点进行细粒度控制。

如欲了解更多关于 Godot 多人游戏功能方面的工作,可以看 GodotEngine.org 的这篇博文。

Java CPU 100% 场景复现与分析

Java CPU 100% 场景复现与分析

OSC 请你来轰趴啦!1028 苏州源创会,一起寻宝 AI 时代

列举 4 种 cpu 100% 的场景,之后会进行复现,以及对应的解决方案。

死循环

Java 代码

public class HelloWorld {
    public static void main(String[] args) {
        // 直接死循环
        new Thread(() -> { while (true){ } }).start();
    }
}

分析

  • top 分析进程使用资源情况

  • 执行 top -Hp 2581 可查看进程 2581 中的占用 CPU 的线程 ID 是 2592 。

  • 执行 16 进制的转换 printf "% x \n" 2592 得到 a20 的,再通过 jstack 命令定位出现问题的地方

大量 Full GC

Java 代码

public static void main(String[] args) {
   //-XX:+UseSerialGC -Xms200M -Xmx200M -Xmn32m -XX:SurvivorRatio=8 -XX:+PrintGCDetails
    byte[] newErdo = new byte[1024 * 1024 * 30];

    while (true) {
        // 触发 full gc
        System.gc();
        byte[] bytes = new byte[1024 * 1024 * 120];
    }

}

分析

  • top 分析资源使用情况

  • 查看 gc 状态

线程计算耗时长

Java 代码

public static void main(String[] args) {
    // 有复杂,耗时长的计算,导致 CPU 100%
    work();
}

private static void work() {
    // 利用 CPU 计算 π 的近似值
    int i = Integer.MAX_VALUE;
    double pi, temp = 0;
    for (int j = 1; j <= i; j++) {
        temp += Math.pow(-1, j + 1) / (2 * j - 1);
    }
    pi = 4 * temp;
    System.out.println(pi);
}

分析

大量线程上下文切换

Java 代码

public static void main(String[] args) {
    // 大量线程 2000 同时并发,且进行等待
    for (int i = 0; i < 2000; i++) {
        new Thread(() -> {
            try {
                work();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }
    System.out.println(1111111111);

}

private static void work() throws InterruptedException {
    Thread.sleep(10000L);
    System.out.println("----> do work now");
}

分析

类似上述案例一样,运行程序后,会发现 CPU 突然飙升~~~

总结

命令 汇总

top -Hp [pid]

printf "%x \n" [tid]

jstack [pid]|grep [16 进制 tid] -A 10

Java vs JavaFX Script vs FXML.哪种更好的JavaFX编程方式?

Java vs JavaFX Script vs FXML.哪种更好的JavaFX编程方式?

我是 JavaFX的新手,我在 JavaFX中遇到了2-3种设计UI的方法.

>简单的Java文件,与我们在Swing中使用的方法相同
>我不知道的JavaFX脚本
> FXML是基于xml的UI设计文件

哪个更好?为什么?

解决方法

只是为了说明一点,在javafx 2.0之前使用了javafx脚本并且不再使用了!

>如果您更熟悉java中的编码UI,则可以使用此方法.但是,我个人不喜欢这种方法,因为当你的应用程序过于复杂时,它会使代码变得复杂.
> JavaFX Script在JavaFX 2.0之前使用,不再使用
>在Javafx 2.0中引入了基于FXML的UI设计.这些帮助程序员使用MVC方法对javafx应用程序进行编码.可以找到一个非常好的FXML介绍here.

来自Oracle docs的一节,Why Use FXML

From a Model View Controller (MVC) perspective,the FXML file that contains the description of the user interface is the view. The controller is a Java class,optionally implementing the Initializable class,which is declared as the controller for the FXML file. The model consists of domain objects,defined on the Java side,that you connect to the view through the controller.

FXML可以使用Scene Builder轻松设计,Scene Builder是javafx应用程序的Drag n Drop UI设计器.使用FXML具有以下优点:

>您的应用程序遵循MVC结构,就像企业JavaEE应用程序一样.
>表示层(UI)与应用层(逻辑)隔离,这样可以在需要时轻松更改应用程序的外观,就像网站一样!
> FXML为您的应用程序带来了可扩展性和可维护性.

我对你的建议是使用FXML.如果您不了解它们,请了解它们.这将是值得的!

今天的关于JavaFX多场景开启,场景复制javafx场景切换的分享已经结束,谢谢您的关注,如果想了解更多关于Cocos2d-x多场景切换生命周期、Godot 4.0 将支持多人游戏场景复制、Java CPU 100% 场景复现与分析、Java vs JavaFX Script vs FXML.哪种更好的JavaFX编程方式?的相关知识,请在本站进行查询。

本文标签: