# 5号玩家共建分支
### TODO LIST
* [x] 网络通讯模块
* [x] 日志模块
* [x] BUTTON常规点击效果事件封装(btnPrefab脚本挂载)
* [x] 层级管理
* [x] 音频管理器
* [x] UI管理器(prefab资源及prefab生成的组件和界面管理)
* [x] 开发者界面(切换日志输出过滤,通过UIManager打开界面,协议流程调用,游戏逻辑功能、动画,检测牌型等)
* [ ] 代码特效管理器
* [ ] 活动图标组件
* [ ] 引导系统
* [ ] 配置管理工具
* [ ] 资源管理器
- 基于2.4的cc.AssetManager的加载封装
- 更加方便的接口调用,只实现了三个接口:
- preload 预加载
- getAssetAsyn 异步取资源
- getAsset 同步取资源
- 强预加载实现(引擎的预加载接口为弱预加载),为首次呈现游戏提供无缝体验支持,且支持进度监测
### NOTE
* proto_bundle 不能导入为插件
*
```javascript
// var $protobuf = require("protobufjs/minimal");
var $protobuf = protobuf;
```
*
```typescript
// import * as $protobuf from "protobufjs";
import * as $protobuf from "./protobuf";
```
* 定义自定义数组
```typescript
@property(cc.Button)
btnArr:cc.Button[] =[];
```
* 定义自定义类型
**自定义类型**
```typescript
enum E_POKER_SUIT {
NONE,
DIAMONDS,
CLUBS,
HEARTS,
JOKER
}
@ccclass
class pokerSprFra{
@property(cc.SpriteFrame)
[E_POKER_SUIT.DIAMONDS]:cc.SpriteFrame = null;
@property(cc.SpriteFrame)
[E_POKER_SUIT.HEARTS]:cc.SpriteFrame = null;
@property(cc.SpriteFrame)
[E_POKER_SUIT.SPADES]:cc.SpriteFrame = null;
constructor() {}
}
```
**使用自定义类型**
```typescript
@property({type:pokerSprFra})
sprFr_Dic = {};
```
* 定义getter setter
```typescript
private _state: E_CONTROL_PANEL_STATE;
@property
get state () {
return this._state;
}
set state (value: E_CONTROL_PANEL_STATE) {
this._state = value;
this.changeStatus(value)
}
```
---
### VSCODE 快捷键
* Shift + Alt + Down/Up 复制光标所在行,并根据操作方向粘贴到临近位置
* 格式化代码: Alt + Shift + F (格式化后保存提交,确保代码格式一致,提高可读性)
---
### 命名规范
* 语法顺序
- 驼峰命名
- 形容词在前,主语在后 e.g. prettyGirl
- 下划线命名(少用)
- 主语在前,形容词在后 e.g. girl_pretty
- 帕斯卡命名
- 同驼峰
* 适用类型
- 类名, prefab, scene 等使用[帕斯卡命名法] e.g. GameScene
- 方法名, 变量名 等使用[驼峰命名法] e.g. getGameScene
- 常量 使用[下划线命名法](全大写, enum以E开头,type以T开头)
e.g.
``` typescript
enum E_HAIR_STYLE
type T_HAIR_STYLE
```
- 特殊情况
- 私有变量 e.g. mName
- 静态私有变量 e.g. sName
### 框架说明
* 解耦规范:
+ 具体挂载UI节点的view类只关注该节点UI相关操作, 以及对事件的处理逻辑, 所有需要的非UI节点数据依赖注入(原则上“挂载UI节点的view类”仅被相应的Mediator类引用)。
+ View 类对其他所有类无感知(主场景和强关联的组件除外 e.g. DdzGameScene; list与item), 目的是让UI组件及脚本方便移植可复用。
* 名词解释
+ PM:Play Moudle, 与大厅模块相对应的游戏模块
* 列表视图
+ 列表继承 PM_UI_List
+ 列表项脚本继承 PM_Abs_UI_ListItem
### 项目代码目录结构
* Script
+ command
+ component(视图组件)
- listitem(列表项组件)
+ componentScript(为视图组件提供行为的脚本组件)
+ devTool
+ facade
+ global
+ manager
+ mediator
+ model
+ net
+ pb
+ plugin(三方库)
### 子游戏bundle加载流程
* 大厅loadBundle,实例化预制体
* 预制体挂在场景脚本组件onLoad,初始化mvc框架