主題
模塊化的基礎:以面向對象的思路來使用cc.Class類
特別說明
CocosCreator微信小遊戲開發系列文章,是我在逐步開發過程中,基於官方文檔之上,記錄一些重點內容,以及對官方文檔中有些知識點的補充和分析。
發現問題的過程
對JavaScript語言不太熟悉的朋友,在看完CocosCreator官方文檔中“腳本開發指南->JavaScript快速入門/CCClass進階參考”這兩章後,估計會有一種似懂非懂的感覺,總感覺差了點什麼內容沒講透吧?
我在寫《成語錦衣衛》小遊戲的闖關頁Json數據初始化,和九宮格填詞區邏輯時,幡然醒悟,原來差的東西是代入面向對象編程的思想。
JavaScript面向對象編程
1. JavaScript中的對象、原型、class
JavaScript的所有數據都可以看成對象,那是不是我們已經在使用面向對象編程了呢?
當然不是。如果我們只使用Number、Array、string以及基本的{...}定義的對象,還無法發揮出面向對象編程的威力。
之前使用Vue框架開發小程序,使用基本數據對象,配合數據響應式刷新,就可以實現界面刷新了,而CocosCreator的組件刷新是靠手動調用api來更新組件的內容,隨着數據越來越複雜,代碼量越來越大,引入面向對象編程的思想,就能幫組我們更好的整理複雜的遊戲邏輯、功能模塊化、提升代碼的可複用性。
如果你熟悉Java或C#,一定明白麪向對象中的兩個基本概念:類、實例對象;
在JavaScript中,思路一樣,概念需要改一改,用原型(prototype)來替換類的概念,class關鍵字是從ES6開始正式被引入到JavaScript中,class關鍵字的作用實際就是對原型的封裝,讓面向對象中的類更好理解。
注意:想學習“JavaScript面向對象編程”的基礎知識,可以到網上搜索關鍵字,找更全面的文章閱讀,我講的僅是一個代入理解的思路。
2. CocosCreator中的面向對象編程
先來看一下腳本組件的框架代碼:
cc.Class({
// 基類,可以是任意創建好的 cc.Class
// 值類型:Function
extends: cc.Component,
properties: {
node: {
default: null,
type: cc.Node
}
},
});
使用cc.Class聲明的類:CCClass是cocos creator引擎底層封裝提供基礎api類,它的功能強大,能夠靈活的定義豐富的元數據,技術細節比較豐富,可以在開發過程中慢慢熟悉。
可以看到CCClass類中的原型對象參數extends,含義是基類,即父類,它可以是任意的類型,這裏也就體現了繼承的關係。
如果extends參數未設置,則是普通的類,它可以被子類繼承,被子類重寫、重載,比如:
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"
3. 模塊化
在遊戲項目中,通常會有很多對象實例,比如:不同角色的人物、障礙物、地圖等等,它們在項目不同的場景中都有用到;很多基礎的UI模塊和業務模塊,在不同的場景都要用到;
那麼腳本代碼模塊化成爲了必然,以面向對象的思路,來抽象屬性,以CCClass類的特性來實現,這就是代碼模塊化的基礎實現方案了。
結尾
自己動手寫,分解項目中的各個模塊需求,通過查文檔和搜索Cocos社區,解決碰到的問題,最終在微信上線了下面這款微信小遊戲《成語錦衣衛》,歡迎大家掃碼體驗,並作爲參考項目模版,開發出屬於自己的小遊戲
預告
下一節和朋友們說一說:Cocos Creator中圖片、Json等資源的動態加載