cocosCreator入门(四) 节点生命周期

官网:https://www.cocos.com/

参考:https://docs.cocos.com/creator/manual/zh/scripting/

配置: MacOS 10.12.6  CocosCreator2.3.3 JavaScript VisualCode

 

JavaScript

一种弱类型语言,标识符由数字,字母和下划线组成。声明变量的时候一般使用:var,若未使用则被认为是全局变量。

内置的数据类型有:

Number, String, Boolean, Null, Undefined, Object

/*
注意:
null: 表示不存在,类似于lua下的nil, Python下的None, C++下的NULL
undefined: 表示未定义的
在javaScript中null用于判定对象是否存在,undefined用于判定函数参数是否传递
*/

 

生命周期

组件脚本的样式如下:

cc.Class({
    extends: cc.Component,          // 用于实现继承

    // 属性声明
    properties: {
        textLabel: {
            default: null,          // 设置默认的属性值,第一次添加到节点时使用
            type: cc.Node,          // 属性的数据类型,在default为null时,会通过type来检测类型
            visible: true,          // 属性检查器中是否显示该属性,默认为true
            serializable: false,    // 设为false,表示不序列保存该属性
            displayName: 'Name',    // 属性检查器中显示的名字
            tooltip: '',            // 属性检查器中面板显示的属性介绍提示
        },
    },

    /*
    生命周期: onLoad -> onEnable -> start -> update -> lateupdate -> onDisable -> onDestroy
    1. 关于onLoad和start: onLoad主要用于组件的初始化,比如A,B两个组件,初始化流程为: 
    A onLoad
    B onLoad
    A start
    B start
    而对于组件的初始化,默认是按照层级管理器的顺序由上往下依次初始化,若想脚本动态修改,可添加属性:
    editor: {
        executionOrder: -1, // 数值越小,越优先执行, 该属性值默认情况下为0
    },
    2. 在销毁节点的时候,同样存在:removeFromParent, 它与destroy的区别:
    removeFromParent调用后,可能因为逻辑的原因该对象依然被使用,如此可能导致内存泄露;
    destroy调用后,会去默认执行存在的onDestroy,并且引擎会在当前帧结束后统一处理,这样会减少内存泄露的风险
    */
    
    // 组件首次激活的时候调用,在该阶段你可以获取到场景中的其他节点,原因是,节点被加入的时候就被初始化了。
    onLoad: function() {},
    // 组件的active由false变为true时,调用
    onEnable: function() {},
    // 组件激活后,在update之前调用。常用于初始化一些经常修改的数据,这些数据在update时改变
    start: function() {},
    // 每一帧渲染前调用
    update: function(dt) {},
    // update调用后调用
    lateupdate: function(dt) {},
    // 节点的active由true变为false时,调用
    onDisable: function() {},
    // 节点调用destroy() 时调用,并在当前帧结束后统一调用
    onDestroy: function() {},
});

关于onEnableonDisable简要说明下:

// 组件激活后,会默认调用onEnable
this.node.active = true;

// 组件反激活后,会默认调用onDisable
// 若active设置false后,组件的节点及其子节点会被隐藏
this.node.active = false;

而对于executionOrder的设置组件的执行顺序,注意

/*
1. 对于onDisable, onDestroy无效
2. 对于onLoad, onEnable, start, update, lateupdate有效
*/

....

 

posted @ 2020-06-08 23:37  Code~  阅读(657)  评论(0)    收藏  举报