当前位置:   article > 正文

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

cocoscreator framework 使用

写在前面


从微信小游戏出生(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);  // 小明
  • 1
  • 2



# 数据模块

  • 目录结构

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) },
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10



# UI模块

  • 目录结构

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

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

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


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

1、新建一个场景或者prefab

2、选中,然后到工具栏

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/152454
推荐阅读
相关标签
  

闽ICP备14008679号