cocos creator 基础一文通(五)--组件 定时器

329 阅读3分钟

组件模块 cc.Component

本文主要写组件的用法,面向对象的语言中,万物皆对象,CC中,任何对象就是组件,通过组件的挂载和传递实现很多功能.

一. 生命周期回调(复习)

1.onLoad
2. start
3.update //渲染前执行
4. lateUpdate //渲染后执行
5.其他

二. 组件 component //每个脚本中的this就是当前挂载的组件

三. 绑定组件属性

组件的属性会公开到cocos属性编辑器中,方便非程序猿调试
1.基本属性
要添加属性,直接在脚本中 property 键值对的值里声明键值对即可
例如:
对应cocos界面
2.属性绑定系统组件 (为组件绑定系统组件) //也可以绑定数组,default属性控制数量
注意:传递的是系统组件的某个实例,一定要用面向对象的思维去理解!!!
这样就可以把其他组件传递进去方便脚本调用
例如:
cc.Class({
    extends: cc.Component,

    properties: {
        //绑定系统的组件
        sprite_item:{
            type:cc.Sprite,
            default:null
        },
    },
    // 绑定后把想调用的组件拖进本组件脚本属性面板的对应属性中,完成对象的传递
    onLoad () {
        console.log(this.sprite_item.node.color);
    },
});

3.属性绑定自定义的脚本组件
比如:我用脚本定义了一个类型enemy,把这个脚本挂载在某个实例上
在另一个组件的另一个脚本中,我想传递这个自定义的组件(他其实是 被我写的enemy实例化的组件,enemy类的实例)
于是开始了:
①. 引用命名空间(构造函数) //让本脚本知道enemy是个什么类型
②. 知道之后就可以按照系统组件的绑定方式绑定了
如果我选着没有挂载enemy脚本的组件的话,会传递失败,因为他不是enemy类型的实例

四. 脚本中的组件类对象的属性和方法 (很多组件的属性方法和node的相似)

1.获取组件的名字:
①. this.name; 返回 组件名字<挂载的脚本名字(运行此句的)>
例如:item1<component_test>
②. this.node.name; 返回Node节点的名字,也就是组件的名字
2. 组件的添加
注意:组件可以重复添加
有的组件添加进去好像自己的属性,有的组件添加进去好像自己的孩子,但其实都是组件的孩子,只不过有的在属性面板上显示 ,有的进入了节点树.
①.添加系统组件
var com_ins=this.addComponent(cc.Sprite); //返回被添加的组件实例
此外 node 也有这个方法
var com_ins=this.node.addComponent(cc.Sprite);
②.添加自定义组件
var my_test=this.addComponent("enemy");//返回被添加的组件实例
此外 node 也有这个方法
var my_test=this.node.addComponent("enemy");//返回被添加的组件实例
3.查找自己的组件(只在自身上找)
getComponent(组件类型) //返回查找到的第一个该类型组件
getComponents(组件类型) //返回查找到的该类型组件列表
        var com_comp1=this.node.addComponent("enemy");
        var com_comp2=this.node.addComponent("enemy");
        var find_comp1=this.getComponent("enemy"); //返回查找到的第一个组件
        var find_comps=this.getComponents("enemy");//返回查找到的组件列表
4. 查找孩子的组件(只在孩子中找)
5. 查找孩子的组件 (包括自身 注意!!!!!!!) //包括自身!!!!!!!!!!!
6. 删除组件
this.destroy();

定时器

一.定时器 (也是节点挂载的脚本的方法 ,!!!!注意!!!!:只有节点及其脚本组件激活时才会被调用)
1.启动一次定时器
2.启动多次定时器
schedule(回调函数,隔多久,执行几次,调用后多久开始)
隔多久: 赋值为0时就会每帧执行
执行几次: ① 赋值为cc.macro.REPEAT_FOREVER会永久执行.
② 注意:赋值后,会执行repeat+1次
调用后多久开始 :①可以不写 默认0
② 如果不写,执行几次也可以不写,默认永久
    onLoad () {
        var call_back_func1=function(dt){console.log("hahahahahaha"+dt);
        };
        this.schedule(call_back_func1,5,cc.macro.REPEAT_FOREVER,3);
    },
3. 取消所有定时器
4. 根据回调 取消某个定时器
    onLoad() {
        var call_back_func1 = function (dt) {
            console.log("hahahahahaha" + dt);
        };
        this.schedule(call_back_func1, 1,cc.macro.REPEAT_FOREVER, 3);
        cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, function (e) {
            if (e.keyCode == cc.macro.KEY.space) {
                console.log("stop Reapt!!!!!");
                this.unschedule(call_back_func1);
            }
        }, this);
    },