先看一段代码:
cc.Class({
extends: cc.Component,
properties: {
userID: 20,
userName: "Foobar"
}
});
这是一个CCClass类,用关键字 properties 声明了两个属性:userID和userName。
这种写法大家很熟悉,官方文档和范例教程里面都是用 JS 的项目,这种代码随处可见。
然后再看看属性声明的TS版:
// 声明一个Sprite属性
@property(cc.Sprite)
backGround: cc.Sprite = null;
// 声明一个Label属性
@property(cc.Label)
label: cc.Label = null;
是不是瞬间感觉简洁多了,看着也舒坦。
接着看,还有更屌的:
// 声明一个Sprite属性
@property({
type: cc.Sprite,
displayName: "背景"
})
backGround: cc.Sprite = null;
// 声明一个带说明的属性
@property({
type: cc.Node,
displayName: "底座",
tooltip: "底部炮台的父节点"
})
baseNode: cc.Node = null;
// 带说明,只能输入整数,最大值10,最小值0
@property({
type: cc.Integer,
displayName: "血量",
min: 0,
max: 10,
tooltip: "人物当前血量"
})
HP = 10;
先定义一个自定义枚举
let SexyType = cc.Enum({
未知: 0,
男: 1,
女: 2
});
然后声明一个枚举类型的属性
// 自定义枚举,下拉框属性,中文显示
@property({
type: cc.Enum(SexyType),
displayName: "性别"
})
sex = SexyType.未知;
只需要默认值设置为字符串,不需要显示定义type
// 声明文本框
@property({ displayName: "作者" })
author = "大掌教";
@property({ displayName: "Q群" })
QQ = "704391772";
包括Vec2,Vec3,Rect,Color等,只需要默认值设置对象实例,不需要定义type
// 声明cc.ValueType子类型,Vec2,Vec3等
@property({
displayName: "坐标"
})
pos: cc.Vec2 = new cc.Vec2(0);
// 声明滑动条,不加type就是浮点值
@property({
type: cc.Integer,
min: 0,
max: 120,
step: 1,
slide: true,
displayName: "年龄"
})
age = 32;
// 声明事件回调,类似button的点击事件回调
@property({
type: cc.Component.EventHandler,
displayName: "双杀"
})
doubleKill = new cc.Component.EventHandler();
完整代码如下:
// Author:lerry(大掌教)
// 微信公众号ID:darkpalm
// Q群:704391772
const { ccclass, property } = cc._decorator;
let SexyType = cc.Enum({
未知: 0,
男: 1,
女: 2
});
@ccclass
export default class MainGame extends cc.Component {
// 声明一个Sprite属性
@property({
type: cc.Sprite,
displayName: "背景"
})
backGround: cc.Sprite = null;
// 声明一个Label属性
@property({
type: cc.Label,
displayName: "标题"
})
label: cc.Label = null;
// 声明一个带说明的属性
@property({
type: cc.Node,
displayName: "底座",
tooltip: "底部炮台的父节点"
})
baseNode: cc.Node = null;
// 带说明,只能输入整数,最大值10,最小值0
@property({
type: cc.Integer,
displayName: "血量",
min: 0,
max: 10,
tooltip: "人物当前血量"
})
HP = 10;
// 自定义枚举,下拉框属性,中文显示
@property({
type: cc.Enum(SexyType),
displayName: "性别"
})
sex = SexyType.未知;
// 声明文本框
@property({ displayName: "作者" })
author = "大掌教";
@property({ displayName: "Q群" })
QQ = "704391772";
// 声明cc.ValueType子类型,Vec2,Vec3等
@property({
displayName: "坐标"
})
pos: cc.Vec2 = new cc.Vec2(0);
// 声明滑动条,不加type就是浮点值
@property({
type: cc.Integer,
min: 0,
max: 120,
step: 1,
slide: true,
displayName: "年龄"
})
age = 32;
// 声明事件回调,类似button的点击事件回调
@property({
type: cc.Component.EventHandler,
displayName: "双杀"
})
doubleKill = new cc.Component.EventHandler();
onLoad() {
cc.Rect
}
start() {
}
}
有没有感觉TS写代码还是很爽的。
这一篇基础属性讲到这里,下一篇将会讲一下高级用法,声明自定义组件属性方法。
公众号ID:darkpalm