游戏开发常用数据结构

如题所述

我前几个视频讲了tuple对hashmap的封装和定制,这是写通用数据结构的前奏。接下来的两个视频继续讲后续的设计,但是很多人还是不知道通用数据容器的设计架构。今天让我来和你谈谈。
数据容器类图
让我们一个一个地看容器接口对象。这是一般的容器结构。如下图所示:
数据容器对象
它包含几个接口,序列化和反序列化,用来封装对象的所有数据。为了将对象数据存储在数据库中,或者跨服务传输对象数据,需要对其进行序列化。当然,这里还有优化的空间。哪些数据需要保存,跨服时哪些数据需要带过来。我们可以标记它,筛选它。的内部实现是遍历数据区m_data中的所有元组数据,并调用elementInterface结构中的序列化和反序列化方法。以下接口是用于添加、搜索、删除和遍历数据集的接口。这里的方法只是对不同类型数据集的hashmap操作。在进行添加和删除操作时,数据更新模块会增加一个更新标记,更新模块会在每次心跳更新时将更新后的增量数据推送到客户端或其他模块。这里还关联了事件模块,会触发数据变更的相关事件。
我们来谈谈elementInterface组件。
元组数据收集类
这是最小的数据集单元,有数据访问和修改接口,包括前面提到的序列化和反序列化接口。同一组关联数据可以定义在一个数据集中,并且可以通过object object接口进行查找和删除。我们通过配置文件定义成员的相关类型、数据集的名称类型等其他属性,然后通过解析器直接生成代码文件。如果不用配置文件生成代码文件,我们也可以直接宏定义,但是这样会破坏数据的可读性,而且比较繁琐。更新模块和事件模块在这里也是相关联的。当数据发生变化时,会更新相关标记,触发相关事件。
数据集的定义如下:
设置元组定义
所有数据集的名称、id、成员类型和其他属性都在这里定义。而且,它是由配置文件生成的,每个数据集都有唯一的全局定义。
先说一下整个过程。玩家有一套基本的属性,比如血量,等级,名字。这时,我们可以在配置文件中定义一个数据集。集合的名字叫做basedata,有三个成员:hp,lv,name。它们对应的类型是int,int,string。这时候我们调用解析器,直接生成一个叫做basedata的元组模板类型,里面包含三种对应类型的数据。由elementInterface封装。然后生成一个elementDefine数据,它定义了该类型的所有静态信息。对了,定义了成员和这个类的枚举。
我们在程序中实例化一个玩家的object对象。然后添加一个basedata类型的数据接口,就可以访问和操作了。例如,要访问或修改血容量,首先要通过object搜索basedata类型的数据集,得到指针后,可以调用get和set操作来修改血容量的属性成员。在这个过程中,会产生相应的更新标志和数据修改事件。然后,如果我们还有一些朋友数据要保存,我们可以定义朋友数据,就像图中一样:
朋友定义
这将生成一个名为friend的数据集。如果我们添加一个朋友,我们将调用object对象来添加一个朋友集。如果我们要删除一个好友,我们会通过id找到这个集合,然后删除。还可以遍历友元类型集,对所有友元数据进行操作。
这是我在前期工作中对通用数据容器设计的思考。
相关问答:嵌入式系统软件设计中的数据结构怎么样嵌入式行业对数据结构要求到不是特别的高,但是面试一般会考察的、而且,个人觉得,嵌入式的前期基础课包含C,C++,数据结构,创客学院的嵌入式视频很适合提高你的编程能力。
温馨提示:答案为网友推荐,仅供参考
相似回答