微信小遊戲開發之面向對象編程和模塊化

主題

模塊化的基礎:以面向對象的思路來使用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等資源的動態加載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章