学习笔记脚本开发之节点与组件

来源:互联网 发布:3d数据图表制作软件 编辑:程序博客网 时间:2024/06/03 13:39
1.对象类型判断
    var obj = new Sprite();
    cc.log(obj instanceof Sprite);  // ture
2.cc.Class 构造一个类
    ctor: 构造函数(同lua)

3.简单声明
    1.基本声明
        properties: {
            height: 20,
            loaded: false
        }
    2.声明属性具备类型
        properties: {
            target: cc.Node,
            pos: cc.Vec2,
        }
    3.声明属性是个数组,声明处可以填写类型
        properties: {
            bools: [cc.Boolean],
            vals: [cc.Vec2],
        }
    4.完整声明
        properties: {
            score: {
                default: 0,
                displayName: "Score(Player)", //属性检查器中的名字
                tooltip: "The socre of player" //鼠标移到参数上时
            }
        }
        常用参数如下:
            1.default: 设置默认值
            2.type: 限定属性类型
            3.visiable:设为false则不在属性检查其面板显示
            4.serializable:设为false则不序列化改属性
            5.displayName:在属性检查器中显示的名字
            6.tooltip:在属性检查器中添加属性Tooltip

    5.数组声明,default必须设置为[], 如果需要在 属性检查器 中编辑,则还需设置type为构造函数
        properties: {
            name: {
                default: [],
                type: [cc.String]
            }
        }
            
#===============================================#
    #访问组件节点和组件(相对组件)
        1.获得组件所在节点
            var node = this.node;
        2.获得其他组件(相对节点)
            var label = this.getComponent(cc.Label);
        getComponent方法也可以传入一个类型,相当于对象类型
            var label = this.getComponent("cc.Label");
        对于自定义组件而言,类型就是脚本名
            var Test = this.getComponent("Test");
        在节点上也有一个作用一样的方法,其是定义在node上
            this.node.getComponent(cc.Label) == this.getComponent(cc.Label)  // true
        如果找不到对应组件,将返回null,然而尝试访问null值将会报错TypeError, 因此不确定组件
        是否存在则可以预先判断一次。
            
    #获得其他节点及其组件
        1.可以直接在属性中通过属性检查器直接将其他节点设置进来。
        2.查找子节点
            var cannons = this.node.children <==> getCHildByName
        如果子节点层次比较深则可以使用cc.find,他会根据传入的路径进行查找
            cc.find("Cannonn01/Barrel/Sfx", this.node);
        也可以直接根据名字查找(从场景根节点查找)
            cc.find(Canvas/Menu/Back");
            
        3.通过全局变量访问
            windows.Global = {
                backNode: null,
                backLabel: null,
            };
            调用
            Global.backNode = this.node;
        4.通过模块访问
            //文件 Global.js
            module.exports
= {
                backNode: null,
                backLabel: null,
            }
            调用:每个脚本都能用 require + 文件名(不含路径) 来获取到对方 exports 的对象。
            var Global = require("Global");
            Global.backNode = this.node;
            
#===============================================#
    1.关闭和激活节点
        this.node.active = false;
        1.隐藏改节点和其下所有子节点
        2.所有节点上update方法将不会执行
        3.onDisable/onEnable(true)方法将被执行
            
    2.更改父节点
        this.node.parent = parentNode;
      或者
        this.node.removeFromParent(false);
        //传入false则不会清除节点上的绑定事件和action
        parentNode.addChild(this.node);
    
    3.更改节点属性
        this.node.x = 100
        this.node.y = 100
        或
        this.node.setPosition(100, 50)
        this.node.setPosition(cc.v2(100, 50));
        
        this.node.rotation = 90;
        或
        this.node.setRotation(90);
        
        this.node.scaleX = 2;
        this.node.scaleY = 2;
        或
        this.node.setScale(2);
        this.node.setScale(2, 2);
        
        this.node.setContentSize(100, 100);
        this.node.setContentSize(cc.v2(100, 100));
        或
        this.node.width = 100;
        this.node.height = 100;
        
        this.node.anchorX = 1;
        this.node.anchorY = 0;
        或
        this.node.setAnchorPoint(1, 0);
                    
        mySprite.node.color = cc.Color.RED;

        mySprite.node.opacity = 128;
    4.常用组件接口        
        this.node        该组件所属的节点实例
        this.enabled    是否每帧执行update方法,同时控制是否渲染显示
        update(dt)        enabled为true时,每帧调用
        onLoad()        初始化时调用,节点添加到节点树时
        start()         在第一次update之前执行,onLoad之后
        lateUpdate()     update会在所有动画更新前执行,在所有组件的update都执行完之后才进行操作。
        onEnable()        
            1.enabled from false to true    
            2.active from false to true
            3.初始时enabled==true,onLoad 之后会调用
        onDisable()
            1.enabled from false to true    
            2.active from false to true
        onDestroy()        当组件或者所在节点调用了 destroy(),则会调用 onDestroy 回调,并在当帧结束时统一回收组件


    #===============================================#
    节点创建和销毁
    
        1.new cc.Node() //创建节点
        2.var node = cc.instantiate(this.target);     //克隆节点
        3.var node = cc.instantiate(this.target); //target是Prefab预制节点,创建预制节点
        4.this.target.destroy();    //销毁节点
        
    destroy 和 removeFromParent 的区别
        1.调用一个节点的 removeFromParent 后,它不一定就能完全从内存中释放,因为有可能由于一些逻辑上的问题,导致程序
          中仍然引用到了这个对象。因此如果一个节点不再使用了,请直接调用它的 destroy 而不是 removeFromParent。

        2.destroy 不但会激活组件上的 onDestroy,还会降低内存泄露的几率,同时减轻内存泄露时的后果。



Creator开源游戏、插件、教程、视频汇总

Cocos所有资源列表

原创粉丝点击