DLFramwork框架
SysModules(系统管理模块)
ISys接口类
所有的系统都继承这个系统基类
const {ccclass, property} = cc._decorator;
@ccclass
export default class ISys{
/**
* 初始化系统
*/
public _InitSys(){
}
/**
* 更新系统
*/
public _UpdateSys(){
}
}
GameBase 基类
这个封装了基础的声明周期函数,后面的所有需要继承mono或者cc.Component的都继承此类,可扩展
const { ccclass, property } = cc._decorator;
@ccclass
export default class GameBase extends cc.Component {
start() {
this._Start();
}
update() {
this._Update();
}
onLoad(){
this._Init();
}
public _Init(){
}
public _Start() {
}
public _Update() {
}
}
SysManager系统管理中心类
主要管理所有的其他系统,是入口类
import GameBase from "./SysModules/GameBase";
import ISys from "./SysModules/ISys";
import IView from "./UIModules/IView";
const { ccclass, property } = cc._decorator;
let dictionary: { [key: string]: ISys; } = {};
@ccclass
export default class SysManager {
public GameBase: GameBase;
/**
* 初始化系统
*/
public static InitSys() {
let game = new cc.Node();
game.setParent(cc.director.getScene().getChildByName("Canvas"));
game.addComponent(GameBase);
game.name = "DLFramwork";
console.log(game.name);
console.log("初始化系统!");
}
/**
* 加载系统
* @param sys 系统名称
*/
public static LoadSys<T extends ISys>(msys: new () => T,sysname): T {
let sys = new msys();
dictionary[sysname] = sys;
sys._InitSys();
console.log("加载" + sysname + "成功!")
return sys;
}
/**
* 获取系统
* @param sysname 系统名称
* @returns 返回系统
*/
public static GetSys<T extends ISys>(msys: new () => T,sysname): T {
let sys;
for (const key in dictionary) {
if (key == sysname) {
sys = dictionary[key];
return sys as T;
}
}
if (sys == null) {
console.log("当前未加载该系统,请加载系统!!");
}
}
}
EventMoudules (事件模块)
主要封装了事件系统已经cocos基本的点击事件等
import ISys from "../SysModules/ISys";
const {ccclass, property} = cc._decorator;
let dictionary: { [key: string]: [fun:Function]} = {};
@ccclass
export default class EventSys extends ISys {
public InitSys(){
console.log("初始化事件系统!");
}
/**
* 点击
* @param gameobject
* @param callback
*/
public ButtonClick(gameobject:cc.Node, callback:Function) {
gameobject.on(cc.Node.EventType.MOUSE_DOWN, function (event) {callback(event);}, this);
}
/**
* 分发事件
* @param eventcode 事件名称
* @param data 数据
*/
public TriggerEvent(eventcode, data = null) {
let callbacks;
for (const key in dictionary) {
if (key == eventcode) {
callbacks = dictionary[key];
}
}
if (callbacks != null) {
for (let index = 0; index < callbacks.length; index++) {
callbacks[index](data);
}
}
}
/**
* 监听事件
* @param eventcode 事件名称
* @param callback
*/
public AddEventLisioner(eventcode,callback:Function){
let callbacks:[Function];
for (const key in dictionary) {
if (key == eventcode) {
callbacks = dictionary[key];
callbacks.push(callback);
}
}
if (callbacks == null) {
callbacks = [Function];
//第一次监听
callbacks.push(callback);
dictionary[eventcode] = callbacks;
}
}
/**
* 移除监听
*/
public RemoveEventLisioner(eventcode,callback:Function){
let callbacks:[Function];
for (const key in dictionary) {
if (key == eventcode) {
callbacks = dictionary[key];
}
}
if (callbacks == null) {
//第一次监听
callbacks.splice(0);
}
}
}
UIModules (UI管理模块)
主要管理ui模块
IData 数据基类
const {ccclass, property} = cc._decorator;
@ccclass
export default class IData{
}
IView UI界面基类
import GameBase from "../SysModules/GameBase";
const { ccclass, property } = cc._decorator;
@ccclass
export default class IView extends GameBase {
public _InitView(){
}
public _RefreshData(data){
}
public _ShowView() {
this.node.active = true;
}
public _CloseView() {
this.node.active = false;
}
}
UISys UI系统管理类
import ISys from "../SysModules/ISys";
import IView from "./IView";
const {ccclass, property} = cc._decorator;
let dictionary: { [key: string]: IView; } = {};
@ccclass
export default class UISys extends ISys{
public UIRoot:cc.Node;
public _InitSys(){
this.UIRoot = new cc.Node();
this.UIRoot.name = "UIRoot";
this.UIRoot.setParent(cc.director.getScene().getChildByName("Canvas"));
this.UIRoot.setPosition(cc.v2(0,0));
}
/**
* 打开函数
* @param viewName 界面名称
* @returns
*/
public OpenView<T extends IView>(mview: new () => T,viewName,data = null): T {
let iview;
for (const key in dictionary) {
if (key == viewName) {
iview = dictionary[key];
iview.ShowView();
console.log("已经打开过该界面!!!");
return iview;
}
}
let self = this;
cc.resources.load("UI/View/" + viewName, cc.Prefab, function (err, view: cc.Prefab) {
let go = cc.instantiate(view);
go.setParent(self.UIRoot);
go.setPosition(cc.v2(0, 0));
iview = go.getComponent(mview);
iview._InitView();
iview._ShowView();
iview._RefreshData(data);
console.log("打开" + viewName + "界面");
return iview;
});
}
/**
* 关闭界面
* @param mview
* @param viewname 界面名称
*/
public CloseView<T extends IView>(mview: new () => T,viewname){
let iview;
for (const key in dictionary) {
if (key == viewname) {
iview = dictionary[key];
iview._CloseView();
return iview;
}
}
}
}
GameModules (游戏管理模块)
主要管理游戏模块
IGame 游戏基类
const {ccclass, property} = cc._decorator;
@ccclass
export default class IGame{
public _InitGame(){
console.log("初始化游戏!!");
}
public _StartGame(){
console.log("开始游戏!!");
}
public _EndGame(){
}
}
GameSys 游戏管理系统类
import ISys from "../SysModules/ISys";
import IGame from "./IGame";
const {ccclass, property} = cc._decorator;
@ccclass
export default class GameSys extends ISys {
private Game: IGame;
public GameRoot:cc.Node;
public _InitSys(){
this.GameRoot = new cc.Node();
this.GameRoot.name = "GameRoot";
this.GameRoot.setParent(cc.director.getScene().getChildByName("Canvas"));
this.GameRoot.setPosition(cc.v2(0,0));
}
/**
* 创建游戏
*/
public CreatGame<T extends IGame>(mgame: new () => T): T{
this.Game = new mgame();
return this.Game as T;
}
/**
* 获取游戏
*/
public GetGame():IGame{
return this.Game;
}
public GetGameRoot(){
return this.GameRoot;
}
}
AudioModules (音频管理模块)
主要管理音频模块
AudioSys 音频管理系统类
import ISys from "../SysModules/ISys";
const {ccclass, property} = cc._decorator;
@ccclass
export default class AudioSys extends ISys {
public _InitSys(){
}
/**
* 播放音效
* @param audioname 音效名称
*/
public PlayAudio(audioname) {
cc.resources.load('Game/Audio/' + audioname, cc.AudioClip, (err, asset: cc.AudioClip) => {
cc.audioEngine.playMusic(asset,false);
});
}
/**
* 播放背景音乐
* @param audioname 音效名称
*/
public PlayBGAudio(audioname){
cc.resources.load('Game/Audio/' + audioname, cc.AudioClip, (err, asset: cc.AudioClip) => {
cc.audioEngine.playMusic(asset,true);
});
}
/**
* 停止所有音乐
*/
public StopAudioSwith(){
cc.audioEngine.pauseAll();
}
/**
* 恢复所有音乐
*/
public PlayAudioSwitch(){
cc.audioEngine.resumeAll();
}
}
NetModules (网络请求模块)
主要管理网络模块
NetSys 网络请求系统类
import ISys from "../SysModules/ISys";
const {ccclass, property} = cc._decorator;
@ccclass
export default class NetSys extends ISys {
public _InitSys(){
}
/**
* Get请求
* @param url
* @param callback
*/
public Get(url,callback){
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) {
var response = xhr.responseText;
callback&&callback.call(response);
}
};
xhr.open("GET", url, true);
xhr.send();
}
/**
* Post请求
* @param url
* @param callback
*/
post(url, params, callback) {
var nums = arguments.length
if(nums == 2){
callback = arguments[1];
params = "";
}
var xhr = cc.loader.getXMLHttpRequest();
xhr.open("POST", url);
xhr.setRequestHeader("Content-Type","application/json;charset=UTF-8");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && (xhr.status >= 200 && xhr.status <= 207)) {
callback&&callback.call(true,xhr.responseText);
}
};
xhr.send(params);
}
}
SaveModules 数据存储模块
主要管理游戏数据存储模块
SaveSys 数据存储系统类
import ISys from "../SysModules/ISys";
import IData from "../UIModules/IData";
const {ccclass, property} = cc._decorator;
@ccclass
export default class SaveSys extends ISys {
public _InitSys() {
}
/**
* 存储值
* @param key
* @param value
*/
public SetKey(key, value) {
cc.sys.localStorage.setItem(key, value);
}
/**
* 取出
* @param key
* @returns
*/
public GetKey(key) {
return cc.sys.localStorage.getItem(key);
}
/**
* 写入json
* @param data
*/
public SaveData(key,data:IData){
cc.sys.localStorage.setItem(key, JSON.stringify(data));
}
/**
* 读取json
* @param key
*/
public GetData(key){
return cc.sys.localStorage.getItem(key);
}
}
AssetBundleModules AB管理模块
主要管理ab包加载模块
AssetBundleSys AB系统管理类
import ISys from "../SysModules/ISys";
const { ccclass, property } = cc._decorator;
@ccclass
export default class AssetBundleSys extends ISys {
public _InitSys() {
}
/**
* 加载bundle
* @param bundlename
*/
public LoadBundle(bundlename: string, action) {
cc.assetManager.loadBundle(bundlename, (err: Error, bundle: cc.AssetManager.Bundle) => {
if (err) {
return console.error(err);
}
action && action.call();
});
}
/**
* 获取加载过的包
* @param bundlename
* @returns
*/
public GetBundle(bundlename) {
return cc.assetManager.getBundle(bundlename);
}
/**
* 移除AB包
* @param bundlename
*/
public RemoveBundle(bundlename) {
let bundle = cc.assetManager.getBundle(bundlename);
cc.assetManager.removeBundle(bundle);
}
/**
* 移除AB包
* @param bundlename
*/
public ReleaseRemoveBundle(bundlename) {
let bundle = cc.assetManager.getBundle(bundlename);
bundle.releaseAll();
cc.assetManager.removeBundle(bundle);
}
}
测试
import AssetBundleSys from "../../DLFramwork/AssetBundleModules/AssetBundleSys";
import AudioSys from "../../DLFramwork/AudioModules/AudioSys";
import SysConfig from "../../DLFramwork/Config/SysConfig";
import EventSys from "../../DLFramwork/EventMoudules/EventSys";
import GameSys from "../../DLFramwork/GameModules/GameSys";
import NetSys from "../../DLFramwork/NetModules/NetSys";
import SysManager from "../../DLFramwork/SysManager";
import GameBase from "../../DLFramwork/SysModules/GameBase";
import UISys from "../../DLFramwork/UIModules/UISys";
import RoomConfig from "./Game/Config/RoomConfig";
import GameMgr from "./Game/GameMgr";
import HallRestRoom from "./Game/Room/HallRestRoom";
import UIConfig from "./UI/Config/UIConfig";
import MainView from "./UI/View/MainView";
const {ccclass, property} = cc._decorator;
@ccclass
export default class Game extends GameBase {
_Init() {
SysManager.InitSys();
SysManager.LoadSys<UISys>(UISys, SysConfig.UISys);
SysManager.LoadSys<GameSys>(GameSys, SysConfig.GameSys);
SysManager.LoadSys<EventSys>(EventSys, SysConfig.EventSys);
SysManager.LoadSys<AudioSys>(AudioSys, SysConfig.AudioSys);
SysManager.LoadSys<NetSys>(NetSys, SysConfig.NetSys);
SysManager.LoadSys<AssetBundleSys>(AssetBundleSys, SysConfig.AssetBundleSys);
}
_Start() {
let game = SysManager.GetSys<GameSys>(GameSys, SysConfig.GameSys).CreatGame<GameMgr>(GameMgr);
game._InitGame();
game._StartGame();
game.GetRoomMgr().ShowRoom<HallRestRoom>(HallRestRoom,RoomConfig.HallRestRoom);
SysManager.GetSys<UISys>(UISys,SysConfig.UISys).OpenView<MainView>(MainView,UIConfig.MainView);
}
}