[开发者心得] 【模块管理和数据中心】——数据中心的各功能介绍⑥

[复制链接]
3425 |12
空伊伊 发表于 2023-3-9 19:34:42 | 显示全部楼层 |阅读模式

本帖最后由 空伊伊 于 2023-11-8 17:27 编辑

本帖最后由 空伊伊 于 2023-11-8 17:26 编辑

模块管理和数据中心

目录

为什么要使用模块管理①

模块管理的使用步骤②

模块管理的各功能介绍③

为什么要使用数据中心④

数据中心的使用步骤⑤

数据中心的各功能介绍⑥

数据中心的各功能介绍及其运行逻辑

1.数据中心工作流

image-20230928153416488

2.SubData

SubData是数据class的基类,继承它,数据才能够被DataCenter管理起来。

SubData的核心功能:通过装饰器标记永久存储字段

@Decorator.saveProperty装饰器有两个作用: 1.让字段能够被永久存储 2.让字段能够被同步到客户端 注意: 继承SubData的子类,属性不能有dataInfo命名,不能有名为init的方法!

export class MyData extends Subdata {

    @Decorator.persistence()
    myName: string // 加了装饰器、能够被永久存储 | 能够同步到客户端

    @Decorator.persistence()
    myAge: number // 加了装饰器、能够被永久存储 | 能够同步到客户端

    myTime: number // 没加装饰器,不能够被永久存储

    /**初始化数据,当远端数据不存在时,会调用这个方法来初始化数据 */
    public initDefaultData(): void {
        this.myName = "Zoe"
        this.myAge = 11
        this.myTime = 2023
    }
}

SubData的生命周期

SubData在被创建的时候,会被添加到以类名为key,SubData为value的一个Map中。(因为一个玩家可能定义了多个SubData来存储数据,所以用一个Map存储方便存取)这个Map就是一位玩家的数据(PlayerData)由DataCenterS管理所有玩家的数据;由DataCenterC管理自己的数据;C的数据是由S同步过来的

SubData的关键方法(都只在服务端调用生效)

保存数据:save()将数据更改保存到Map中(如果参数填true,数据的改动会同步给客户端)

同步数据:syncToClient()将数据同步给客户端

SubData提供了数据变化的委托

onDataChange:Type.Action

当服务端数据变化时,服务端执行委托方法;当服务端将数据同步给客户端时,客户端执行委托方法

3.DataCenterS

DataCenterS是一个单例,需要用getInstance()来获取其实例

DataCenterS的主要功能:

自动将数据保存到KV服务器:

DataCenterS每隔10秒,会将自己管理的Map里的数据,使用DataStorage.asyncSetPlayerData上传到KV服务器。(这么做的目的是降低与KV服务器的交互频率)

自动将数据同步给DataCenterC:

DataCenterS在检测到玩家进入游戏时,会使用DataStorage.asyncGetPlayerData从KV服务器上获取一次数据,然后同步给DataCenterC。之后,可以在每次保存数据时将DataCenterS的数据同步给DataCenterC

管理了房间内所有客户端的数据:

DataCenterS将房间内所有玩家的PlayerData以键值对的形式存放在playerDataMap中

DataCenterS的关键方法

获取指定玩家的数据:getData()传入Player|playerID以及SubData名称取出对应的数据

获取在线且数据准备就绪的玩家列表:getReadyPlayerIds()

当玩家数据准备好时的监听:onPlayerJoined

4.DataCenterC

DataCenterC是一个单例,需要用getInstance()来获取其实例

●DataCenterC的主要功能:管理自己的数据

●DataCenterC的关键方法:获取自己的数据:getData()判断数据是否准备就绪:ready()

回复

使用道具 举报

GoKing 发表于 2023-3-9 23:14:58 | 显示全部楼层
我愿称为最强,这数据中心,解决了我一大困扰
回复

使用道具 举报

空伊伊楼主 发表于 2023-3-10 09:35:22 | 显示全部楼层
GoKing 发表于 2023-3-9 23:14
我愿称为最强,这数据中心,解决了我一大困扰

哈哈哈,快快用起来~
回复

使用道具 举报

GoKing 发表于 2023-3-10 09:49:57 | 显示全部楼层
空伊伊 发表于 2023-3-10 09:35
哈哈哈,快快用起来~

不用多久就用上了
回复

使用道具 举报

阿豪 发表于 2023-3-11 20:12:04 | 显示全部楼层
正想学学模块,大佬就发教程了,下个项目就学起来
回复

使用道具 举报

近我者甜 发表于 2023-3-12 13:38:12 | 显示全部楼层
是否可以给一个项目实例呢?比如说玩家金币的初始化,获取,增加,减少啥的
回复

使用道具 举报

空伊伊楼主 发表于 2023-3-13 09:27:05 | 显示全部楼层
近我者甜 发表于 2023-3-12 13:38
是否可以给一个项目实例呢?比如说玩家金币的初始化,获取,增加,减少啥的 ...

可以看第⑤个帖子,里面其实已经写了你说的这部分代码~
回复

使用道具 举报

近我者甜 发表于 2023-3-14 16:48:27 | 显示全部楼层
空伊伊 发表于 2023-3-13 09:27
可以看第⑤个帖子,里面其实已经写了你说的这部分代码~

底子有点弱,最好希望能出一个示例项目,便于学习
回复

使用道具 举报

空伊伊楼主 发表于 2023-3-15 11:39:04 | 显示全部楼层
近我者甜 发表于 2023-3-14 16:48
底子有点弱,最好希望能出一个示例项目,便于学习

好嘞,我写一个。
回复

使用道具 举报

近我者甜 发表于 2023-3-15 23:04:52 | 显示全部楼层
空伊伊 发表于 2023-3-15 11:39
好嘞,我写一个。

大佬,辛苦
回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表