DLFramwork框架(CocosCreator)

DLFramework是一个针对CocosCreator设计的游戏框架,包括SysModules的ISys接口类、GameBase基类和SysManager系统管理中心,EventModules的事件模块,UIModules的UI管理,GameModules的游戏管理,AudioModules的音频管理,NetModules的网络请求,SaveModules的数据存储以及AssetBundleModules的AB管理。每个模块都有相应的基类和系统管理类,提供全面的游戏开发支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
    }
}

项目地址

DLFramwork

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值