# cococs-creator-frame-3d **Repository Path**: zwei_qingfeng/cococs-creator-frame-3d ## Basic Information - **Project Name**: cococs-creator-frame-3d - **Description**: 适用于CocosCreator3.6以上 - **Primary Language**: TypeScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 73 - **Created**: 2023-07-06 - **Last Updated**: 2023-07-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 介绍 > 框架设计之初主要考虑H5与小游戏环境,最终的目的是希望:
> 1、更好的多人协同开发体验。
> 2、尽可能统一的开发规范(尽量避免口头约束)。
> 3、更小的首屏/首包体积。
> 4、更小的增量更新体积。
> 5、复用通用模块的能力。
⚠️: 大部分的框架目录点击后,都会在属性检查器页面生成它的一些说明文字,可以进行查看。
⚠️: 框架暂时不允许自定义assets下的文件夹,所有文件夹可以通过菜单栏App来创建。
⚠️: 使用vscode推荐安装 Code Spell Checker 插件。
# 使用 ## 0、初始化项目 * 在空文件夹下执行```npx @gamex/cc-cli@latest```或```npx --registry=https://registry.npmjs.org @gamex/cc-cli@latest``` ## 1、更新项目框架 * 在项目根目录下执行```npm run upgrade``` ## 2、使用内置package * 在项目根目录下执行```npm run package``` # 关键点 ## 0、ESLint * 在vscode中安装ESLint插件 * 在项目根目录下执行**npm install** ## 1、UI * 通过菜单栏App/创建/View来创建UI,会自动创建于assets/app-bundle/app-view下。 * UI分为4类:Page、Paper、Pop和Top,他们都继承自BaseView,它们的层级按顺序依次增大(同camera下),即: Top > Pop > Paper > Page。 * UI的HideEvent如果选择destroy,会自动清理静态引用的资源。 * 落地页由Page和Paper共同组成,通过这种模型可以轻松实现多人协同开发。 * Page和Paper在创建时区分3D与2D,它们在实例化时会分别设置为scene/Root3D/UserInterface、scene/Root2D/UserInterface的子节点。 ``` // 打开一个UI(如果没能出现自动提示,请在vscode中打开一下executor.ts文件即可) app.manager.ui.show({ name: '自动提示UI名', data: 自动提示UI类的onShow方法需要的参数, onShow:(){}, onHide:(result){ //自动提示UI类的onHide的返回值类型 }, onError:(){} }); app.manager.ui.hide({ name: '自动提示UI名', data: 自动提示UI类的onHide方法需要的参数, onHide:(result){ //自动提示UI类的onHide的返回值类型 } }) // 显示通用loading(加载UI时会自动调用) app.manager.ui.showLoading(); // 隐藏通用loading app.manager.ui.hideLoading(); // 增加触摸屏蔽 const uuid = app.manager.ui.addTouchMask(); // 移除触摸屏蔽 app.manager.ui.removeTouchMask(uuid: string); ...//等等 ``` ## 2、音频 通过菜单栏App/创建/Sound来生成目录,位置处于assets/app-bundle/app-sound目录下,分为effect和music两种类型 ``` app.manager.sound.playMusic({ name: '自动提示' }) app.manager.sound.playEffect({ name: '自动提示' }) // 其它api和参数可以查看相关接口 ``` ## 3、全局定时器 ``` // 它返回的就是个Component,可以使用它的schedule或scheduleOnce等方法 app.manager.timer.get('我的自定义定时器名称') ``` ## 4、全局事件 ``` app.manager.event.on app.manager.event.once app.manager.event.off app.manager.event.targetOff ``` ## 5、全局loader * 对cc.assetManager的一些简单封装 ``` app.manager.loader.load app.manager.loader.loadDir app.manager.loader.preload ``` ## 6、全局库 ``` // 任务: 执行同时执行、顺序执行、组合执行、重试等能力,比Promise更好用 app.lib.task // 本地存储: 永久存、按天存、按周存 app.lib.storage ``` ## 7、自定义Manager * 通过菜单栏App/创建/Manager来创建自定义Manager,位置处于assets/app-builtin/app-manager下 ``` app.manager.xxx ``` ## 8、自定义Control * 通过菜单栏App/创建/Control来创建自定义Control,位置处于assets/app-builtin/app-control下 * 它与Manager的区别是: Manager更偏向一些全局类的功能,而Control更偏向于作为某个UI的对外接口(UI是不能直接进行访问的) ``` 1、作为对外输出,Control内部可以新建变量和方法,在外部(通过XXXControl.inst调用)变量和方法会自动变为只读。 2、Control内部额外有一个emit和call方法,用来发射事件,这个方法在其它任何地方都是无法访问的。区别在于call方法只会执行第一个注册的事件并获得返回值。 每个View可以通过继承BaseView.BindControl(Control)来绑定一个Control, 绑定后在View脚本内部可以通过this.control访问到这个Control实例,与inst调用不同的是,它是不受限的(属性等都不是只读), 而且可以通过this.control中的on、once、off来接收和关闭接收Control中emit或call的事件 ``` ## 9、自定义Model * 通过菜单栏App/创建/Model来创建自定义Model,位置处于assets/app-builtin/app-model下 ``` app.data.xxx app.config.xxx ``` ## 10、使用扩展包(package) 可以使用一些基于npm管理的扩展包 * 使用内置的扩展包 ``` // 项目根目录下执行 npm run package // 在项目中使用 import {} from 'db://pkg/@gamex/xxx' ``` * 你也可以自己上传一些包,然后使用如下命令管理 ``` // 项目根目录下执行添加 npm run pkg:add @xxx/test // 项目根目录下执行移除 npm run pkg:remove @xxx/test // 项目根目录下执行更新 npm run pkg:update // 在项目中使用 import {} from 'db://pkg/@xxx/test' ``` 以上添加或删除操作,如果导致`编辑器报错`或`运行时代码`没有更新,则尝试点击资源管理器右上角的「`刷新按钮`」,或`菜单[开发者->缓存->清除代码缓存]`,报错问题即可解决(CocosCreator资源管理器的BUG)。 ## 11、其它 * assets/app-appinit为游戏首屏页面,可以渲染loading内容,也可以去初始化一些业务需要的东西 * assets/app/handle.ts是框架内置的生命周期函数,App.EventType下有一些生命周期事件,可以通过app.on或app.once监听 * assets/app/setting.ts是对框架的一些初始化配置, 例如: ``` // 可以全局设置弹窗的背景颜色、透明度等信息(也可以在某个UI中重写onShade方法,自定义某个UI的背景颜色等信息) UIManager.setting.shade = {...} ```