参考:

Laya项目发布详解

Laya2.0 内嵌模式、加载模式、分离模式、文件模式的场景加载创建和场景打开关闭

版本2.1.1.1

白鹭中的场景是exml制作,发布后exml代码都会打包到default.thm.json中,在项目运行时,在Main文件中加载。

Laya中的场景则提供了多种方式。

Laya编辑模式下F9。查看场景设置。

发布模式有文件模式,内嵌模式,加载模式,分离模式。 默认是文件模式。

这些模式的区别就是我的场景UI数据究竟放哪里。

我们现在分别用4种模式创景场景,每个场景只放一个button按钮组件,则每个场景的ui数据就是一个按钮。

文件模式 (默认)

文件模式不会创建场景类,只会生成场景数据。

创建TestSceneWJ场景,不会生成场景类,指的是LayaMaxUI.ts中不会自动生成如下图中的类。

ui数据会生成一个单独的TestSceneWJ.json文件,里面包含了Button的场景数据

打开场景

Laya.Scene.open("test/TestSceneWJ.scene");

在类里使用loadScene会去加载test/TestSceneWJ.json,加载完成后显示界面

export default class TestSceneWJ extends Laya.View {
constructor() {
super();
}
createChildren():void{
   super.createChildren();
this.loadScene("test/TestSceneWJ");
}
}

内嵌模式

内嵌模式会生成场景类,并且场景数据内嵌到类里。

创建内嵌场景TestSceneNQ,自动生成了场景类TestSceneNQ。并且Button的ui数据在这个类里。

游戏发布后,ui数据打包在bundle.js里。在微信小游戏下,这种方法占用了宝贵的初始包4m资源,所以不推荐。

打开场景时,在类里使用createView使用ui数据

this.createView(TestSceneNQUI.uiView);

内嵌模式不能用Laya.Scene.open打开。需要自己new然后addChild。

  

加载模式

加载模式会生成场景类,ui数据会打包到一个ui.json文件里,使用时加载。

创建加载模式场景TestSceneZJ,自动生成了场景类

编辑模式F9,设置场景的发布模式为加载模式,然后ctrl+F12导出

加载模式不会生成TestSceneZJ.json的单独文件,而是所有加载模式的场景数据都在ui.json里。

加载模式无法使用Laya.Scene.open打开,只能自己new,然后addChild

先加载ui.json,然后再使用

Laya.loader.load("ui.json", Laya.Handler.create(this, this.onLoadUI));

private onLoadUI{
Laya.View.uiMap = Laya.loader.getRes("ui.json");
Laya.stage.addChild(new TestSceneJZ());
}

用createView创建

export default class TestSceneZJ extends Laya.View {
constructor() {
super();
} createChildren(){
super.createChildren();
this.createView(Laya.View.uiMap["test/TestSceneJZ"]);
}
}

  

分离模式

分离模式会创建场景类,然后生成一个单独的场景数据json。和文件模式的区别就是:文件模式不会创建场景类。

创建分离模式场景TestSceneFL,自动生成场景类。

单独的场景文件json

打开场景

Laya.Scene.open("test/TestSceneFL.scene")

时,在类里使用loadScene加载

this.loadScene("test/TestSceneFL");

  

现在我们知道了4种模式的区别。那么实际项目如何使用

内嵌模式:场景数据放在bundle.js里,占用了宝贵的初始包资源。

加载模式:和白鹭的default.thm.json一样,将所有场景数据都放在里面一次性加载。场景数据不多时,可以考虑使用,毕竟只加载一次,减少了多场景多json的请求。

文件模式:不自动生成场景类,不太方便使用。

分离模式:将场景数据分成多个json,在使用时才去加载,减少了用户初次进入游戏的等待时间。

Laya的场景以及场景的加载的更多相关文章

  1. laya在微信小游戏中加载BitmapFont失效的问题

    发布为微信小游戏后,在微信工具中测试时总是提示加载retry to load TheRed.fnt,并以error告终.由于没有任何出错信息,无奈之下只好阅读源码.对BitmapFont的处理分为两个 ...

  2. Unity加载场景、计时器、加载时不销毁某物体

    异步加载场景,SceneManager.LoadSceneAsync(SceneName);需引用 using UnityEngine.SceneManagement;命名空间, Applicatio ...

  3. Promise场景实例之图片加载

    所有图片加载完再添加到页面 { // 所有图片加载完再添加到页面 function loadImg(src) { return new Promise(function (resolve, rejec ...

  4. (转)Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)

      异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Application.LoadLevel(“yourScene ...

  5. 利用青瓷布局自定义加载的场景,而不是自己改写qici-loading

    加载界面如果全部通过自己手动布局不仅不美观,还很难控制.借用原生的场景切换加载效果,来实现我们游戏的加载效果. 没有做加载修改的原来的加载顺序:   黑乎乎界面->(游戏定制的加载)你的第一个场 ...

  6. Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条

    Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条 异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Ap ...

  7. Unity 异步加载场景

    效果图如下: 今天一直在纠结如何加载场景,中间有加载画面和加载完毕的效果动画! A 场景到 B ,  看见网上的做法都是 A –> C –> B.  C场景主要用于异步加载B 和 播放一些 ...

  8. Unity3d 动态加载场景物件与缓存池的使用

    聊聊Unity3d动态加载场景物件那些事儿. 众所周知,在策划或美术设计完游戏场景地图后,一个场景中可能会存在成千上万个小的物件,比如石头,木箱子,油桶,栅栏等等等等,这些物件并不是游戏中的道具,仅仅 ...

  9. unity 5.3 以后加载场景

    记录下官方建议的加载场景的方法: StartCoroutine(LoadYourAsyncScene()); IEnumerator LoadYourAsyncScene() { // The App ...

  10. Cocos Creator 加载和切换场景(官方文档摘录)

    Cocos Creator 加载和切换场景(官方文档摘录) 在 Cocos Creator 中,我们使用场景文件名( 可以不包含扩展名)来索引指代场景.并通过以下接口进行加载和切换操作: cc.dir ...

随机推荐

  1. LG4762 Virus synthesis

    Virus synthesis 初始有一个空串,利用下面的操作构造给定串 S . 串开头或末尾加一个字符 串开头或末尾加一个该串的逆串 求最小化操作数, ∣S∣≤105 . 题解 显然应该多使用操作2 ...

  2. Centos6 克隆后简单的网络配置

    第一步:修改主机名 $ vi /etc/sysconfig/network     第二步: $ vi  /etc/udev/rules.d/70-persistent-net.rules   注: ...

  3. 深入理解RocketMQ的消费者组、队列、Broker,Topic

    1.遇到的问题:上测试环境,上次描述的鸟问题又出现了,就是生产者发3条数据,我这边只能收到1条数据. 2.问题解决: (1)去控制台看我的消费者启动情况,貌似没什么问题 , (2)去测试服务器里看日志 ...

  4. SIGAI机器学习第二十二集 AdaBoost算法3

    讲授Boosting算法的原理,AdaBoost算法的基本概念,训练算法,与随机森林的比较,训练误差分析,广义加法模型,指数损失函数,训练算法的推导,弱分类器的选择,样本权重削减,实际应用. AdaB ...

  5. 在CentOS7上面搭建GitLab服务器

    首先要在CentOS系统上面安装所需的依赖:ssh.防火墙.postfix(用于邮件通知).wegt,以下这些命令也会打开系统防火墙中的HTTP和SSH端口访问. 1.安装SSH协议 安装命令:sud ...

  6. Navicat连接mysql报错1251 -client does not support authentication protocol

    原文https://blog.csdn.net/qq_35654080/article/details/82588188 详解请参考https://blog.csdn.net/chszs/articl ...

  7. npm 安装全局包 不是内部或外部命令的问题

    场景: npm已经安装成功  ,通过npm install -g 安装的 全局包 提示不是内部或外部命令 第一步: npm list -g --depth=0:查看npm全局包的路径,和有哪些安装包 ...

  8. bash: cd: too many arguments 报错

    路径名或者变量有空格时候,会造成参数太多的错误提示 解决方法:把空格的地方用引号包括起来

  9. apt-get linux 虚拟机安装vm tools下载

    要重启机器才行D:\Program Files (x86)\linux.iso解压tar zxvf VMwareTools-9.9.0-2304977.tar.gz

  10. C void的指针 强制类型转换(int*)p 把变量指针p强制转换成指向int类型的指针

    #include <stdio.h> int main(void){ void *p; int a = 14322; char c ='A'; p = &a; //p = & ...