gpt4 book ai didi

c++ - 如何在实体组件系统中寻找具有特定组件的实体?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:16 24 4
gpt4 key购买 nike

如何在实体组件系统中查找具有特定组件的实体?

在我当前的实现中,我将组件存储在
std::unordered_map< entity_id, std::unordered_map<type_index, Component *> > .

因此,如果系统需要访问具有特定组件的实体,访问它们的最有效方式是什么。

我目前有两个想法:

  1. 遍历 map 并跳过没有这些组件的实体。
  2. >创建保存指向实体的指针的“映射器”或“ View ”,并在每次将组件分配给实体或从实体中删除时更新它们。

我看到了一些使用位掩码等的方法,但这似乎无法扩展。

最佳答案

您的情况需要 std::unordered_multimap。

“find”方法将返回第一个元素的迭代器,它与 multimap 中的键匹配。 “equal_range”方法会返回一对,包含第一个和最后一个对象的迭代器,与您的键匹配。

实际上,unordered_multimap 允许您创建的是一个内存中的键值数据库,它为同一键存储一堆对象。

如果你的“查询”变得比“给我所有具有组件 T 的对象”更复杂,并变成类似“同时给我所有具有组件 T 和 B 的组件”,你会更适合创建一个以 unordered_multimap 作为成员的类,并有一堆用于查询内容的实用方法。

关于这个主题的更多信息:

关于c++ - 如何在实体组件系统中寻找具有特定组件的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25921405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com