??VITAMIN 游戲框架??
██╗ ██╗██╗████████╗ █████╗ ███╗ ███╗██╗███╗ ██╗
██║ ██║██║╚══██╔══╝██╔══██╗████╗ ████║██║████╗ ██║
██║ ██║██║ ██║ ███████║██╔████╔██║██║██╔██╗ ██║
╚██╗ ██╔╝██║ ██║ ██╔══██║██║╚██╔╝██║██║██║╚██╗██║
╚████╔╝ ██║ ██║ ██║ ██║██║ ╚═╝ ██║██║██║ ╚████║
╚═══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝
????基于 cocos creator & fairygui 的 游戲框架
?現(xiàn)有功能
-
依賴注入框架底層
- 采用MVC架構(gòu)的vitamin依賴注入框架
[此框架有TS和C#兩個(gè)版本]
,代碼邏輯更清晰毒费,規(guī)范 - 對(duì)模塊開發(fā)人員友好趋观,便捷
- 采用MVC架構(gòu)的vitamin依賴注入框架
-
嵌入FairyGUI模塊
- FairyGUI將設(shè)計(jì)人員和開發(fā)人員徹底分離票灰,并具有功能完善UI的編輯器
-
層級(jí)管理器
- 默認(rèn)scene, ui,control,tip,debug,可自行添加刪除層級(jí),其中ui層的子層通過
UI管理器
管理
- 默認(rèn)scene, ui,control,tip,debug,可自行添加刪除層級(jí),其中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 /| | | | | / /___| | | | __/ | | |
\/ \/\___| \_/ |_|_| |_| \____/|_| |_|\___|_| |_|