Vitamin 游戲框架之CocosCreator

??VITAMIN 游戲框架??

                          ██╗   ██╗██╗████████╗ █████╗ ███╗   ███╗██╗███╗   ██╗
                          ██║   ██║██║╚══██╔══╝██╔══██╗████╗ ████║██║████╗  ██║
                          ██║   ██║██║   ██║   ███████║██╔████╔██║██║██╔██╗ ██║
                          ╚██╗ ██╔╝██║   ██║   ██╔══██║██║╚██╔╝██║██║██║╚██╗██║
                           ╚████╔╝ ██║   ██║   ██║  ██║██║ ╚═╝ ██║██║██║ ╚████║
                            ╚═══╝  ╚═╝   ╚═╝   ╚═╝  ╚═╝╚═╝     ╚═╝╚═╝╚═╝  ╚═══╝

????基于 cocos creator & fairygui 的 游戲框架

?現(xiàn)有功能

  • 依賴注入框架底層

    • 采用MVC架構(gòu)的vitamin依賴注入框架[此框架有TS和C#兩個(gè)版本],代碼邏輯更清晰毒费,規(guī)范
    • 對(duì)模塊開發(fā)人員友好趋观,便捷
  • 嵌入FairyGUI模塊

    • FairyGUI將設(shè)計(jì)人員和開發(fā)人員徹底分離票灰,并具有功能完善UI的編輯器
  • 層級(jí)管理器

    • 默認(rèn)scene, ui,control,tip,debug,可自行添加刪除層級(jí),其中ui層的子層通過UI管理器管理
  • UI管理器

    • 針對(duì)FairyGUI重新設(shè)計(jì)的API,模塊開發(fā)人員無需關(guān)心資源加載等復(fù)雜邏輯
    • 使用控件注入,強(qiáng)類型化UI控件定義
    • 將UI規(guī)則分組,并針對(duì)手機(jī)進(jìn)行了優(yōu)化
    • 集成tip提示滾動(dòng)隊(duì)列
    • 可通過繼承UIGroupPlugin對(duì)UI層級(jí)進(jìn)行擴(kuò)展
  • 資源管理器

    • 基于2.4的cc.AssetManager的加載封裝
    • 更加方便的接口調(diào)用,只實(shí)現(xiàn)了三個(gè)接口:
      • preload 預(yù)加載
      • getAssetAsyn 異步取資源
      • getAsset 同步取資源
    • 強(qiáng)預(yù)加載實(shí)現(xiàn)(引擎的預(yù)加載接口為弱預(yù)加載),為首次呈現(xiàn)游戲提供無縫體驗(yàn)支持,且支持進(jìn)度監(jiān)測(cè)
  • 音頻管理器

  • 鍵盤事件管理器

  • Net網(wǎng)絡(luò)通訊模塊

    • Net層參考了Pomelo的API設(shè)計(jì)宅广,基于長(zhǎng)連接實(shí)現(xiàn)消息的收發(fā),推送版仔。
    • 使用在creator內(nèi)的vitamin工具面板,你可以一鍵生成雙端協(xié)議,并擁有良好的代碼提示.
    • 前端只依賴接口文件包券,這樣就保證了在增加協(xié)議的同時(shí)首妖,不增加代碼體積。
  • 代碼特效管理器

    • 用于管理純代碼實(shí)現(xiàn)的游戲效果塔次,提供通過繼承EffectPlugin來擴(kuò)展程序特效庫.內(nèi)置曲線飛行特效。
  • 操作控制管理器

    • 用于管理所有操作控制器,內(nèi)置一個(gè)搖桿控制器,可設(shè)置皮膚名秀。
  • 調(diào)試管理器

    • 管理調(diào)試命令,可通過F7呼出調(diào)試控制臺(tái)励负,并通過繼承DebugPlugin來擴(kuò)展調(diào)試命令。
  • 豐富的工具集

    • 包括了數(shù)學(xué)計(jì)算,顏色處理,數(shù)組處理,對(duì)象池,等豐富的工具集匕得。
  • 狀態(tài)機(jī)組件

    • 公共的狀態(tài)機(jī)組件可用于處理游戲AI等復(fù)雜邏輯继榆。
  • 紅點(diǎn)樹組件

    • 針對(duì)游戲的紅點(diǎn)提示功能,封裝了一個(gè)通用的紅點(diǎn)樹形節(jié)點(diǎn)組件。
  • 活動(dòng)圖標(biāo)組件

    • 這個(gè)組件可通過配置的方法,添加及刪除活動(dòng)圖標(biāo)汁掠,對(duì)后期活動(dòng)的迭代更友好略吨。
  • 引導(dǎo)系統(tǒng)

    • 由于引導(dǎo)系統(tǒng)需要關(guān)聯(lián)游戲諸多邏輯,所以引導(dǎo)系統(tǒng)只提供雛形框架考阱。
  • 配置管理工具

    • 配合vitamin的creator工具,你可以一鍵導(dǎo)出配置定義包
    • templates通過id索引,你可以使用templates定義輕松獲取配置信息
    • 配置結(jié)構(gòu)擁有良好的代碼提示
  • 其他功能

    • 日志輸出 Logger封裝了常用的輸出類型,并在瀏覽器下區(qū)分顏色顯示翠忠。
    • 簡(jiǎn)易事件 EventEmiter封裝了一個(gè)簡(jiǎn)單且易用的事件系統(tǒng)。
    • 字節(jié)處理 ByteArray完全還原了ActionScript3的API,方便處理字節(jié)數(shù)據(jù)乞榨。
    • 緩動(dòng)類型 Ease包含了較全面的緩動(dòng)類型秽之。
    • 動(dòng)畫系統(tǒng) 針對(duì)序列幀的動(dòng)畫系統(tǒng),實(shí)現(xiàn)了動(dòng)畫常見的功能,且擴(kuò)展性良好
    • 常用的Shader 內(nèi)置了模糊,點(diǎn)光,等8種Shader
  • 實(shí)驗(yàn)功能

    • Filter濾鏡組件 Filter合并了effect material的功能,更方便使用

??未來功能

  • 配套creator插件
  • 音頻圖集功能

??范例

@ccclass
export default class Main extends cc.Component {

    @property
    logEnabled: boolean = true;

    @property
    sslEnabled: boolean = true;

    onLoad() {

        //初始化Vitamin框架 這里需要在creator內(nèi)設(shè)置好bundle
        Vitamin.initialize({
            dynamicAtlasEnabled: false,
            res: {
                effects: {
                    cctype: cc.EffectAsset,
                    preload: false,
                    manifest: []
                },
                prefabs: {
                    cctype: cc.Prefab,
                    preload: false,
                    manifest: []
                },
                materials: {
                    cctype: cc.Material,
                    preload: false,
                    manifest: []
                },
                textures: {
                    cctype: cc.SpriteFrame,
                    preload: true,
                    manifest: []
                },
                templates: {
                    cctype: cc.JsonAsset,
                    preload: true,
                    manifest: []
                }
            }
        });
        //UI管理器會(huì)根據(jù)打開的界面自動(dòng)加載資源,也可預(yù)加載資源
        //Vitamin.inst.ui.load([{name:"game"}]);
    }

    start() {
        Config.logenabled = this.logEnabled;
        Config.sslsocket = this.sslEnabled;

        //注冊(cè)固定式的UI
        Vitamin.inst.ui.registerView(MainView, UILayer.FIX, "game", null, UISize.NORMAL, false);
        Vitamin.inst.ui.openView(MainView);

        //注冊(cè)彈出式的UI 彈出式UI默認(rèn)具有獨(dú)占模式
        Vitamin.inst.ui.registerView(SettingWindow, UILayer.DIALOG, "game");
        Vitamin.inst.ui.openView(SettingWindow);

        //注冊(cè)AlertUI Alert界面可以多開
        Vitamin.inst.ui.registerView(ComonAlert, UILayer.ALERT, "game");
        Vitamin.inst.ui.openView(ComonAlert);
        
        Vitamin.inst.loop(1000, this, () => {
            //顯示Tip消息  tip默認(rèn)為隊(duì)列模式 并通過傳入類定義的形式自定義消息樣式
            Vitamin.inst.ui.tip(SimpleTip, UITipPos.LEFT, getRandomString(20, true));
        });

        Vitamin.inst.delay(2000,this,(...args)=>{
            Logger.debug("delay",...args);
        },1,2,3);

        Vitamin.inst.addTick(this,()=>{
            Logger.log("Tick")
        });

        Vitamin.inst.callLater(this,(...args)=>{
            Logger.debug("callLater",...args);
        },1,2,3);
        
        //預(yù)加載資源 
        //這里區(qū)別于引擎自帶的預(yù)加載,如果說引擎自身的加載為弱加載,這里則為強(qiáng)加載
        //這里為首次載入游戲 進(jìn)入到場(chǎng)景之前提供一種無縫的選擇
        Vitamin.inst.res.preload(true,(percent) => Logger.log(percent), () => {
            //異步取一個(gè)Prefabs
            Vitamin.inst.res.getAssetAsyn('prefabs', 'sprite-inner-glow', this, (asset: cc.Prefab) => {
                var newNode = cc.instantiate(asset);
                Vitamin.inst.node.addChild(newNode);
                newNode.x = 0;
                newNode.y = 100;
                //同步取一個(gè)Teture
                var frame: cc.SpriteFrame = Vitamin.inst.res.getAsset('textures', 'cocos_logo') as cc.SpriteFrame;
                console.log('asset:', Vitamin.getQualifiedClassName(asset));
                newNode.getComponent(cc.Sprite).spriteFrame = frame;
            });

            //builtin-2d-gray-sprite
            //對(duì)節(jié)點(diǎn)添加濾鏡組件
            cc.find('Canvas/logo').addComponent(Filter).initialize('builtin-2d-gray-sprite', true);

            //注冊(cè)配置 這里傳入取JSON資源的方法
            templates.initialize((name: string) => {
                return (Vitamin.inst.res.getAsset('templates', name) as cc.JsonAsset).json;
            });

            Logger.log(templates.getTemplateById(templates.Map.props,1001));
        })
        
        // 添加搖桿
        Vitamin.inst.control.initialize();
        Vitamin.inst.control.initializePlugin('rock', fgui.GRoot.inst);
        Vitamin.inst.control.enablePlugin('rock');
    }
}


export class SettingWindow extends DialogBase {

    //定義好在UI編輯器中控件,框架會(huì)將此控件引用自動(dòng)注入
    public btnEffect: fgui.GButton;

    //通過裝飾器注入框架內(nèi)的數(shù)據(jù)模塊
    @Model
    private login: ModelLogin;

    //界面打開會(huì)觸發(fā)
    public enter() {
        super.enter();
        Logger.log(this.login.name);
    }

    //界面加載完畢會(huì)觸發(fā)
    public onload() {
        super.onload();
        Logger.log(this.btnEffect);
    }

    //舞臺(tái)大小變更會(huì)觸發(fā)
    public onresize(w: number, h: number) {

    }

    //界面關(guān)閉觸發(fā)
    public exit() {
        super.exit();
    }
}


                                             _           ___ _                
                              /\ /\_____   _(_)_ __     / __\ |__   ___ _ __  
                             / //_/ _ \ \ / / | '_ \   / /  | '_ \ / _ \ '_ \ 
                            / __ \  __/\ V /| | | | | / /___| | | |  __/ | | |
                            \/  \/\___| \_/ |_|_| |_| \____/|_| |_|\___|_| |_|
                                                
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吃既,一起剝皮案震驚了整個(gè)濱河市考榨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鹦倚,老刑警劉巖河质,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異震叙,居然都是意外死亡掀鹅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門捐友,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淫半,“玉大人,你說我怎么就攤上這事匣砖】瓶裕” “怎么了昏滴?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)对人。 經(jīng)常有香客問我谣殊,道長(zhǎng),這世上最難降的妖魔是什么牺弄? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任姻几,我火速辦了婚禮,結(jié)果婚禮上势告,老公的妹妹穿的比我還像新娘蛇捌。我一直安慰自己,他們只是感情好咱台,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布络拌。 她就那樣靜靜地躺著,像睡著了一般回溺。 火紅的嫁衣襯著肌膚如雪春贸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天遗遵,我揣著相機(jī)與錄音萍恕,去河邊找鬼。 笑死车要,一個(gè)胖子當(dāng)著我的面吹牛允粤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屯蹦,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼维哈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了登澜?” 一聲冷哼從身側(cè)響起阔挠,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脑蠕,沒想到半個(gè)月后购撼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谴仙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年迂求,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晃跺。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡揩局,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掀虎,到底是詐尸還是另有隱情凌盯,我是刑警寧澤付枫,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站驰怎,受9級(jí)特大地震影響阐滩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜县忌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一掂榔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧症杏,春花似錦装获、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至走芋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間潘鲫,已是汗流浹背翁逞。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留溉仑,地道東北人挖函。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像浊竟,于是被迫代替她去往敵國(guó)和親怨喘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348