加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C中存储和检索复杂对象的高效方法?

发布时间:2020-12-16 05:35:14 所属栏目:百科 来源:网络整理
导读:我正在做一个小地牢模拟游戏.这个游戏是非常详细的,我打算随着时间的推移,拥有一个代表一个“怪物”的200k个类的实例.它们包含了怪兽的技能和历史.像他用过的药水,他住在哪里,他的巡逻路线等等. 我开始使用SQLite实现,并使用一个名为“怪物”的简单表,其中包
我正在做一个小地牢模拟游戏.这个游戏是非常详细的,我打算随着时间的推移,拥有一个代表一个“怪物”的200k个类的实例.它们包含了怪兽的技能和历史.像他用过的药水,他住在哪里,他的巡逻路线等等.

我开始使用SQLite实现,并使用一个名为“怪物”的简单表,其中包含所有数据.这允许我使用SQL查询来查找每个帧上的模拟计算所需的怪物.例如:找到巡逻点A的所有怪物,或者找到所有使用Potion X的怪物等等.不幸的是,在每个框架上多次查询SQLite都会使游戏放缓.即使是2D游戏,我需要精确的毫秒来进行模拟计算.

此外,我将来需要加入JOIN来做图:我需要知道一个怪物是否攻击了另一个怪物,或者怪物是否是另一个怪兽的一部分.这会进一步减缓事情.

有人有任何建议如何处理这个问题?

我的数据类似于这样:

解决方法

如果您不使用实体组件系统,请考虑将游戏迁移到使用一个.相关数据的每一位可以存储在自包含的组件中,实体本身是标识组件的一些不透明标识符.当使用ECS时,不要让一个拥有一大堆数据的游戏实体脱离关系.一个特定类型的所有组件一起存在于一个大型池中,而您的实体只是一个标识符,用于指定该池中他们关心的组件.这允许您做的是批量组件更新.如果您在每个具有广告资源的怪物上都有一个广告资源组件,那么您的所有广告资源组件都可以或多或少存储在内存中.这意味着在处理它们时,您具有高缓存一致性,这可以显着提高性能.

也可能是你只是想要做太多的每一帧.使用实体组件系统,您可以将特定子系统限制为每X个帧或每X秒(如果需要).也许AI组件只需要运行一秒钟就可以考虑下一步该做什么,但是它们需要不间断地移动,以便每帧更新位置.或者也许放在一起,一个图表和图表需要太长时间才能在一帧中完成,所以你每秒钟计算一次,或者将处理分成两帧,以便在帧上迭代一半的实体,其余的在第二帧帧.有很多方法可以拆分.

Here is some more reading on component systems if you haven’t seen them before

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读