这一篇感觉想转载,就按转载来把,转载链接:https://ldc2.layabox.com/doc/?language=zh&nav=zh-ts-3-4-2
4.1 生命周期
有关生命周期的文档,还是需要看官方文档,不过官方就只是给出了几张图片。官方文档链接
下面从官网上盗图过来:
鉴于本人对laya引擎代码不是很熟悉,所以属于引擎代码的部分就不详细说了,那部分是引擎代码呢?其实都是,哈哈哈。开个玩笑,第一个图主要是引擎的,第二个图就是我们实现的脚本类。
第一个图只要是说,节点和组件的生命周期,也就是说我们界面的组件是怎么渲染出来的,我们看到最高是场景,由引擎创建场景上所有节点,创建节点就是调用各自的构造函数,比如节点的构造函数,还有脚本的构造函数等。
接着就激活节点,激活结点也是调用激活的函数,并且也会onAwake和onEnable等(希望没有讲错,哈哈哈)。
销毁的过程越是一样,就不说了。
第二个图,才是我们的重点,虽然我们不深究引擎是怎么调用的,但是我们也要知道是啥时候调用的。
好像上面的注释写的很清楚的,我好像也不用说了,那今天就这样?好像字有点少,不行,我们还是做做实验验证一下。
我在脚本上的几个函数中,加了打印,目前我们就看到了这样的结果。(有点证据,底气足点)
4.1.1 脚本属性
还记得我们直接生成脚本的时候,会创建一堆代码么?
export default class Scene extends Laya.Script {
constructor() {
super();
/** @prop {name:intType, tips:"整数类型示例", type:Int, default:1000}*/
let intType = 1000;
/** @prop {name:numType, tips:"数字类型示例", type:Number, default:1000}*/
let numType = 1000;
/** @prop {name:strType, tips:"字符串类型示例", type:String, default:"hello laya"}*/
let strType = "hello laya";
/** @prop {name:boolType, tips:"布尔类型示例", type:Bool, default:true}*/
let boolType = true;
// 更多参数说明请访问: https://ldc2.layabox.com/doc/?nav=zh-as-2-4-0
}
}
没错,这一堆代码,其实就是IDE默认给我们定义的脚本属性。
一个完整的标签主要由下面几个部分:
- type IDE属性类型,此类型是指IDE属性类型,非真正的属性类型,不过大多情况下是一样的
- name IDE内显示的属性名称
- tips IDE内鼠标经过属性名称上后,显示的鼠标提示,如果没有则使用name(可选)
- default 输入框显示的默认值(可选)
IDE默认提供了不少类型供脚本使用,主要参数类型如下:
属性名称 | 说明 |
---|---|
name | 属性显示名称,必须与变量名一致 |
tips | 鼠标经过显示标签 |
type | 类型:Int,Number,sNumber,String,Bool,Option,editOption,Check,Color,ColorArray,Node,Nodes,Prefab,SizeGrid,Vec,Vector,Ease |
accept | String的关联属性,accept:res 为接收资源地址 |
acceptTypes | Node和accept的关联属性, 接收的类型,比如和节点使用RevoluteJoint,PrismaticJoint,RigidBody;与accept:res使用jpg,png,txt限制后缀 |
option | Option和editOption的关联属性 option:可选择列表,如aaa,bbb,ccc |
min | Number和sNumber的最小值 |
max | Number和sNumber的最大值 |
label | Nodes的关联属性,展示的属性名( 可选) 如果有则根据labels确定长度 没有就显示长度输入框 |
types | Nodes的关联属性,每个元素的类型(可选) |
xCount | Nodes的关联属性,水平方向显示多少个 |
sType | Nodes的关联属性,单个元素的类型 |
default | 默认值 |
怎么用呢?就是我们在IDE界面的右小角就看的到怎么使用:
如果需要修改默认值,就可以直接修改,这样脚本就可以使用。
4.1.2 组件化开发
最后还是借用一下引擎的文档把,引擎文档写的就比较好了。链接
最后借用一下总结:
场景的Runtime类,职责是对于整个场景显示的全局控制,比如全局开始与结束的显示,全局积分的改变等等。
场景的脚本类,职责是场景中全部的逻辑控制,比如玩家点了开始,场景继承类中侦听这个点击操作,不是立即要开始游戏,而是要通知场景的脚本类,游戏开始了,场景的控制脚本才有权决定游戏要不要开始,什么逻辑下开始,下一步由谁出场、出场位置等等。
节点的脚本类,负责具体的逻辑执行,一旦游戏的角色和NPC在场景中出现后,具体的攻击与伤害等等,都是各自负责处理,不要都堆到场景类中。比如方块受重力掉落,什么情况下反弹,什么情况下碎裂,这是由方块的脚本根据自己的碰撞反馈进行处理的,场景控制脚本无需关心。只有方块的逻辑脚本里,判断自己碰到了地板,才需要通知场景控制脚本:游戏结束了。场景控制脚本再去通知场景继承类:游戏结束了,把结束面板弹出来吧。
所以,清楚了解各自的职能,分工明确,职责单一,就可以实现解耦的组件化开发。
用好LayaAir 2.0引擎组件化开发,开发效率与维护效率都会提升很多,代码结构也会变得更加清晰易懂。
4.1.3 最后
这一篇都是参考laya官方的,也不好意思写原创了,就是转载把,大家好好消化,下一节开始就要实现第一个游戏了。