laya引擎学习(四、生命周期)

本文介绍了LayaAir2.0引擎中的组件生命周期和脚本属性,强调了组件化开发的重要性。通过脚本构造函数、激活函数等阐述了节点和组件的创建与激活过程。同时,详细讲解了IDE中脚本属性的定义与使用,包括属性名称、类型、默认值等。最后,讨论了场景、脚本类和节点脚本类的职责,提倡解耦的组件化开发以提高开发效率。
摘要由CSDN通过智能技术生成

这一篇感觉想转载,就按转载来把,转载链接:https://ldc2.layabox.com/doc/?language=zh&nav=zh-ts-3-4-2

4.1 生命周期

有关生命周期的文档,还是需要看官方文档,不过官方就只是给出了几张图片。官方文档链接

下面从官网上盗图过来:

script1

鉴于本人对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
acceptString的关联属性,accept:res 为接收资源地址
acceptTypesNode和accept的关联属性, 接收的类型,比如和节点使用RevoluteJoint,PrismaticJoint,RigidBody;与accept:res使用jpg,png,txt限制后缀
optionOption和editOption的关联属性 option:可选择列表,如aaa,bbb,ccc
minNumber和sNumber的最小值
maxNumber和sNumber的最大值
labelNodes的关联属性,展示的属性名( 可选) 如果有则根据labels确定长度 没有就显示长度输入框
typesNodes的关联属性,每个元素的类型(可选)
xCountNodes的关联属性,水平方向显示多少个
sTypeNodes的关联属性,单个元素的类型
default默认值

怎么用呢?就是我们在IDE界面的右小角就看的到怎么使用:

在这里插入图片描述

如果需要修改默认值,就可以直接修改,这样脚本就可以使用。

4.1.2 组件化开发

最后还是借用一下引擎的文档把,引擎文档写的就比较好了。链接

最后借用一下总结:

场景的Runtime类,职责是对于整个场景显示的全局控制,比如全局开始与结束的显示,全局积分的改变等等。

场景的脚本类,职责是场景中全部的逻辑控制,比如玩家点了开始,场景继承类中侦听这个点击操作,不是立即要开始游戏,而是要通知场景的脚本类,游戏开始了,场景的控制脚本才有权决定游戏要不要开始,什么逻辑下开始,下一步由谁出场、出场位置等等。

节点的脚本类,负责具体的逻辑执行,一旦游戏的角色和NPC在场景中出现后,具体的攻击与伤害等等,都是各自负责处理,不要都堆到场景类中。比如方块受重力掉落,什么情况下反弹,什么情况下碎裂,这是由方块的脚本根据自己的碰撞反馈进行处理的,场景控制脚本无需关心。只有方块的逻辑脚本里,判断自己碰到了地板,才需要通知场景控制脚本:游戏结束了。场景控制脚本再去通知场景继承类:游戏结束了,把结束面板弹出来吧。

所以,清楚了解各自的职能,分工明确,职责单一,就可以实现解耦的组件化开发。

用好LayaAir 2.0引擎组件化开发,开发效率与维护效率都会提升很多,代码结构也会变得更加清晰易懂。

4.1.3 最后

这一篇都是参考laya官方的,也不好意思写原创了,就是转载把,大家好好消化,下一节开始就要实现第一个游戏了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值