定义
调拥cc.class,传入一个原型对象(已键值对的形式设定所需要的类型参数)
var sprite = cc.Class({
name:'sprite'
})
使用cc.class创建了一个类型,设置类名为"sprite",类名用于序列化(一般可以省略)
实例化
sprite变量保存的是一个JavaScript构造函数,可以直接new出来一个对象
var obj = new sprite()
类型判断
使用JavaScript的原生的instanceof
cc.log(obj instanceof sprite); //true
构造函数
使用ctor声明构造函数
var sprite = cc.Class({
ctor:function(){
cc.log(this instanceof sprite); //true
}
})
实例方法
var sprite = cc.Class({
//声明一个print函数
print:fucntion(){}
})
继承
使用extends试下继承
//父类
var Shape = cc.Class();
//子类
var Rect = cc.Class({
extends:Shape
});
不论子类是否有定义构造函数,子类实例化之前父类的构造函数都会被自动调用
重写
所有的成员方法都是虚方法,子类可以直接重写父类方法
var Shape = cc.Class({
getName:function(){
return 'Shape'
}
});
var Rect = cc.Class({
extends:Shape
getName:function(){
return 'Rect'
}
})
var obj = new Rect();
cc.log(obj.getName()); //输出Rect
和构造函数不同,父类被重写的方法并不会被CCClass自动被调用:如果要调用:
方法一:使用CCClass封装的this._super:
var Shape:cc.Class({
getName:function(){
return "Shape"
}
});
var Rect:cc.Class({
extends:Shape,
getName:function(){
var baseName = this._super();
return baseName+"(rect)";
}
});
var obj = new Rect()
cc.log(obj.getName()) //"Shape(rect)"
方法二:使用JavaScript原生写法
var Shape:cc.Class({
getName:function(){
return "Shape"
}
});
var Rect:cc.Class({
extends:Shape,
getName:function(){
var baseName = Shape.property.getName.call(this);
return baseName+"(rect)";
}
});
var obj = new Rect()
cc.log(obj.getName()) //"Shape(rect)"
父类构造函数
继承后。ccclass会自动统一调用父类构造函数。不需要显示调用
var Shape = cc.Class(){
ctor:function(){
cc.log('Shape')
}
}
var Rect = cc.Class(){
extends:Shape
}
var Square = cc.Class({
extends:Rect,
ctor:function(){
cc.log('Square')
}
})
var square = new Square()
上面的代码依次输出Shape和Squre
声明属性
在properties字段中,填写属性的名字和属性的参数
properties:{
pos:[cc.Vec2], //简单声明
score:{
default:0,
displayname:'Scrore(play)',
tooltip:'the score of player'
}
}
default: 设置属性的默认值,这个默认值仅在组件第一次添加到节点上时才会用到
type: 限定属性的数据类型,详见 CCClass 进阶参考:type 参数
visible: 设为 false 则不在 属性检查器 面板中显示该属性
serializable: 设为 false 则不序列化(保存)该属性
displayName: 在 属性检查器 面板中显示成指定名字
tooltip: 在 属性检查器 面板中添加属性的 Tooltip
get/set声明
在属性中设置了set和get以后,访问属性的时候,就能出发定义的get和set方法
properties:{
width:{
get:function(){
ruturn this._width;
}
set:function(value){
this._width = value;
}
}
}
1、当你对属性进行赋值的时候会调用属性的set函数
2、当你对属性进行取值的时候会调用属性的get函数
**注意:**在设定了get以后,这个属性就不能被序列化,也不能指定默认值,
set 方法接收一个传入参数,这个参数可以是任意类型。
静态变量和静态方法
var Shape = cc.Class({
statice:{
count:0, // 静态变量
getBounds:function(){ //静态方法
}
}
})
//上面代码等价于
var Shape = cc.Class({...});
Shape.count = 0; //声明静态变量
Shape.getBounds = function(){ //声明静态方法
}
静态成员会被子类继承,继承是会将父类的静态变量浅拷贝给子类(即子类和父类的静态变量指向同一个对象)
editor参数
editor只能定义在cc.Component的子类
cc.Class({
extends: cc.Component,
editor: {
// 允许当前组件在编辑器模式下运行。
// 默认情况下,所有组件都只会在运行时执行,也就是说它们的生命周期回调在编辑器模式下并不会触发。
//
// 值类型:Boolean
// 默认值:false
executeInEditMode: false,
// requireComponent 参数用来指定当前组件的依赖组件。
// 当组件添加到节点上时,如果依赖的组件不存在,引擎将会自动将依赖组件添加到同一个节点,防止脚本出错。
// 该选项在运行时同样有效。
//
// 值类型:Function (必须是继承自 cc.Component 的构造函数,如 cc.Sprite)
// 默认值:null
requireComponent: null,
// 脚本生命周期回调的执行优先级。
// 小于 0 的脚本将优先执行,大于 0 的脚本将最后执行。
// 该优先级只对 onLoad, onEnable, start, update 和 lateUpdate 有效,对 onDisable 和 onDestroy 无效。
//
// 值类型:Number
// 默认值:0
executionOrder: 0,
// 当本组件添加到节点上后,禁止同类型(含子类)的组件再添加到同一个节点,
// 防止逻辑发生冲突。
//
// 值类型:Boolean
// 默认值:false
disallowMultiple: false,
// menu 用来将当前组件添加到组件菜单中,方便用户查找。
//
// 值类型:String (如 "Rendering/Camera")
// 默认值:""
menu: "",
// 当设置了 "executeInEditMode" 以后,playOnFocus 可以用来设定选中当前组件所在的节点时,
// 编辑器的场景刷新频率。
// playOnFocus 如果设置为 true,场景渲染将保持 60 FPS,如果为 false,场景就只会在必要的时候进行重绘。
//
// 值类型:Boolean
// 默认值:false
playOnFocus: false,
// 自定义当前组件在 **属性检查器** 中渲染时所用的网页 url。
//
// 值类型:String
// 默认值:""
inspector: "",
// 自定义当前组件在编辑器中显示的图标 url。
//
// 值类型:String
// 默认值:""
icon: "",
// 指定当前组件的帮助文档的 url,设置过后,在 **属性检查器** 中就会出现一个帮助图标,
// 用户点击将打开指定的网页。
//
// 值类型:String
// 默认值:""
help: "",
}
});