定義類
var Sprite = cc.Class({
name: "sprite"
});
var obj = new Sprite();
定義的類的類型名為 Sprite 可以用 new 構造一個對象。
也可以不定義類名,直接構造類。
構造函數——ctor/ __ ctor__
ctor 不允許含有參數,如果構造時需要用到參數,必須使用__ctor__
var Sprite = cc.Class({
ctor: function () {
cc.log(this instanceof Sprite); // true
}
});
繼承——extends
// 父類
var Shape = cc.Class();
// 子類
var Rect = cc.Class({
extends: Shape
});
父類構造函數
不論子類是否有定義構造函數,子類執行個體化前父類的構造函數都會被自動調用。
不需要嘗試調用父類的構造函數,否則父構造函數就會重複調用。
在一些很特殊的情況下,父構造函數接受的參數可能和子構造函數無法相容。這時開發者就隻能自己手動調用父構造函數并且傳入需要的參數,這時應該将構造函數定義在__ ctor__中。
var Node = cc.Class({
ctor: function () {
this.name = "node";
}
});
var Sprite = cc.Class({
extends: Node,
ctor: function () {
// 子構造函數被調用前,父構造函數已經被調用過,是以 this.name 已經被初始化過了
cc.log(this.name); // "node"
// 重新設定 this.name
this.name = "sprite";
Node.call(this); // 别這麼幹!
this._super(); // 也别這麼幹!
}
});
var obj = new Sprite();
cc.log(obj.name); // "sprite"
屬性聲明
Cocos 類中,将聲明的屬性放在 properties 中,分簡單聲明和完整聲明。
簡單聲明:
當聲明的屬性為基本 JavaScript 類型時,可以直接賦予預設值
當聲明的屬性具備類型時(如:cc.Node,cc.Vec2 等),可以在聲明處填寫他們的構造函數來完成聲明
當聲明屬性的類型繼承自 cc.ValueType 時(如:cc.Vec2,cc.Color 或 cc.Rect),除了上面的構造函數,還可以直接使用執行個體作為預設值
當聲明屬性是一個數組時,可以在聲明處填寫他們的類型或構造函數來完成聲明
properties: {
height: 20, // number
type: "actor", // string
loaded: false, // boolean
target: null, // object
target: cc.Node,
pos: cc.Vec2,
pos: new cc.Vec2(10, 20),
color: new cc.Color(255, 255, 255, 128),
any: [], // 不定義具體類型的數組
bools: [cc.Boolean],
strings: [cc.String],
floats: [cc.Float],
ints: [cc.Integer],
values: [cc.Vec2],
nodes: [cc.Node],
frames: [cc.SpriteFrame],
}
完整聲明
有些情況下,我們需要為屬性聲明添加參數,這些參數控制了屬性在屬性檢查器中的顯示方式,以及屬性在場景序列化過程中的行為
常見屬性:
default: 設定屬性的預設值,這個預設值僅在元件第一次添加到節點上時才會用到
type: 限定屬性的資料類型
visible: 設為 false 則不在 屬性檢查器 面闆中顯示該屬性
serializable: 設為 false 則不序列化(儲存)該屬性
displayName: 在 屬性檢查器 面闆中顯示成指定名字
tooltip: 在 屬性檢查器 面闆中添加屬性的 Tooltip
properties: {
score: {
default: 0,
displayName: "Score (player)",
tooltip: "The score of player",
}
}
注:可以在 onl oad 函數中用 this 設定屬性,防止變量在屬性檢查器中指派後無法改變。
靜态變量
靜态變量或靜态方法可以在原型對象的 statics 中聲明:
var Sprite = cc.Class({
statics: {
// 聲明靜态變量
count: 0,
// 聲明靜态方法
getBounds: function (spriteList) {
// ...
}
}
});
重寫
子類方法可以直接重寫父類方法
用 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)"
标簽:cc,Class,CocosCreator,var,構造函數,聲明,class,屬性
來源: https://blog.csdn.net/qq_43575267/article/details/88796163