CocosCreator游戏开发框架(一):是什么 && 为什么

本文介绍了CocosCreator游戏开发框架的背景和设计理念,包括资源管理、框架模块、数据交互、UI管理及网络协议等方面。作者分享了框架的目录结构和使用方法,并探讨了游戏开发中的模式选择,如避免在节点上直接挂脚本。文章强调了框架的可复用性和灵活性,为开发者提供了一种组织项目结构的思路。
摘要由CSDN通过智能技术生成

写在前面


从微信小游戏出生(2018年初)到现在,已经使用CocosCreator一年多了(之前做手游主要是cocos2d-x+lua),趁着这段时间有空,想着整理出一个基于CocosCreator游戏开发框架

这个框架主要是将我在开发过程中觉得好用的结构和模式、插件,以及在论坛上和博客上参考大神们的教程和想法(有些是直接拿来用),整合在一起的。一方面想提高开发效率,另一方面大家发现问题及时提出及时讨论,慢慢优化和改进。

框架工程是否跟游戏工程分开

在开始之前,因为这个问题纠结了好久。框架工程跟游戏工程分离,框架工程作为一个独立代码库,仅仅作为游戏工程的子模块,这样代码库可以统一管理。

我上个项目就是这样做的,但是你会发现,把框架模块单独拿出来给下一个项目复用,里面有一些耦合了游戏工程的代码。如果要每个成员在紧张的游戏开发过程中保持清醒,去保持框架模块的独立性,肯定是一个蛋疼的过程。

后来阅读了两篇文章(关于游戏设计模式的)之后,确定了该框架仅仅作为一个“纯净”的基础框架,每开一个新项目就拷贝过去,然后根据游戏的需求自己去调整。

两篇文章的链接在下面,有兴趣的可以了解下,不扯远了,准备进入正题!

【游戏设计模式】之一 序言:架构,性能与游戏

为什么在游戏开发中我不喜欢用MVC系列模式了




正文


目录细分和规划

如下图:

  • animClip:存放动画文件(.anim)
  • font:存放字体文件
  • prefab:存放不需要动态加载的预制体
  • texture:存放用于贴图资源
  • texture/ui_common:存放公用的ui资源图集文件。
  • texture/ui_module:每个功能/模块单独用到的资源打包后的图集文件,比如main场景单独用到的打包一起,然后mian场景勾选自动释放资源,切换场景时就会自动释放没用的资源(前提是没有被其他的地方引用到)。
  • resources:存放一切需要用于动态加载(cc.load.loadRes)的资源

为什么有些资源放在resources里面,有些放到外面?

先看官网的解释:

总结一下:

1、resources文件夹中的资源可以跟它外部的其他资源,相互引用,所以放哪,问题不大。
2、只有放在resources文件夹的资源才能用cc.loader.loadRes动态加载。
3、构建时,resources文件夹中的所有资源连同它们关联依赖的resources文件夹外部的资源,都会被导出,并且项目中无用的资源将会在构建的过程中自动剔除。
4、resources文件夹的资源,会增大包体和settings.js的大小,JSON的自动合并策略也将受到影响,无法尽可能将零碎的JSON合并起来。




框架模块介绍


# 配置表模块

直接在现有的插件excel-killer的基础上做了小调整。

  • 相关目录(可以根据需求自己改动,相关文件:packages/excel-killer/panel/index.js)

plugins-excel/excel:存放excel表

plugins-excel/excel-ouput: 存放执行插件后的js输出文件

assets/script/data/config: 执行插件后,会自动把js文件从plugins-excel/excel-ouput拷贝到此目录


  • 如何使用
let cfgman = require('CfgMan');
console.log(cfgman[1].name);  // 小明



# 数据模块

  • 目录结构

IDataModel.ts:数据模块基类,主要功能:读取数据表、读写本地缓存数据、网络数据交互


  • 本地缓存数据接口

LoadStorage():将该模块的本地缓存数据读取到内存

Query(sKey: string, defaultValue: any = null):访问指定键名的值

Set(sKey: string, value: string | number):设置指定键名的值

Save():保存内存数据到缓存文件


  • 网络数据交互接口

sendProtocolMsg(msg):发送协议到服务端

registerListeners():注册网络监听事件,需要在getMessageListeners()定义需要监听的协议和方法

// AccountModel.ts
getMessageListeners() {
   
    return {
   
        // key:消息名,value:执行函数
        ['G2C_Login']: (msg) => {
    this.G2C_LoginSuccess(msg) },
    }
}



# UI模块

  • 目录结构

UIMng:UI管理器,用于打开、关闭UI

UIBase:UI界面基类,在这里可以定义一些通用方法,供子类调用或者继承

UIHelp:UI工具类,封装一系列UI相关的功能方法


  • 如何使用(配合自动化插件)

1、新建一个场景或者prefab

2、选中,然后到工具栏:扩展 -> ui-creator

create-node-tree操作:将prefab节点树的结构自动导出到ts文件(目标文件夹:assets/scrip

  • 21
    点赞
  • 156
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值