组件模块 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);
},