cc.calss类的实现

定义

调拥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: "",
  }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值